Logo Zephyrnet

Gọi hàm AWS Lambda từ Luồng dữ liệu Amazon Kinesis nhiều tài khoản | Dịch vụ web của Amazon

Ngày:

Kiến trúc nhiều tài khoản trên AWS là điều cần thiết để tăng cường bảo mật, tuân thủ và quản lý tài nguyên bằng cách tách biệt khối lượng công việc, cho phép phân bổ chi phí chi tiết và hỗ trợ cộng tác trên các môi trường riêng biệt. Nó cũng giảm thiểu rủi ro, cải thiện khả năng mở rộng và cho phép cấu hình mạng nâng cao.

Trong kiến ​​trúc phát trực tuyến, bạn có thể có nhà sản xuất sự kiện, bộ lưu trữ luồng và người tiêu dùng sự kiện trong một tài khoản hoặc trải rộng trên các tài khoản khác nhau tùy thuộc vào yêu cầu kinh doanh và CNTT của bạn. Ví dụ: công ty của bạn có thể muốn tập trung dữ liệu luồng nhấp chuột hoặc dữ liệu nhật ký từ nhiều nhà sản xuất khác nhau trên các tài khoản khác nhau. Người tiêu dùng dữ liệu từ hoạt động tiếp thị, kỹ thuật sản phẩm hoặc phân tích yêu cầu quyền truy cập vào cùng một dữ liệu phát trực tuyến trên các tài khoản, điều này đòi hỏi khả năng cung cấp kiến ​​trúc phát trực tuyến nhiều tài khoản.

Để xây dựng kiến ​​trúc phát trực tuyến nhiều tài khoản, bạn có thể sử dụng Luồng dữ liệu Amazon Kinesis như bộ lưu trữ luồng và AWS Lambda với tư cách là người tiêu dùng sự kiện. Luồng dữ liệu Amazon Kinesis cho phép xử lý dữ liệu truyền phát theo thời gian thực trên quy mô lớn. Khi được tích hợp với Lambda, nó cho phép xử lý dữ liệu phi máy chủ, cho phép bạn phân tích và phản ứng với các luồng dữ liệu trong thời gian thực mà không cần quản lý cơ sở hạ tầng. Việc tích hợp này hỗ trợ nhiều trường hợp sử dụng khác nhau, bao gồm phân tích thời gian thực, xử lý nhật ký, nhập dữ liệu Internet of Things (IoT), v.v., khiến nó trở nên có giá trị đối với các doanh nghiệp cần thông tin chuyên sâu kịp thời về dữ liệu phát trực tuyến của họ. Trong bài đăng này, chúng tôi trình bày cách bạn có thể xử lý dữ liệu được nhập vào luồng trong một tài khoản bằng hàm Lambda trong một tài khoản khác.

Sự ra mắt gần đây của tính năng hỗ trợ Kinesis Data Streams dành cho chính sách dựa trên tài nguyên cho phép gọi Lambda từ một tài khoản khác. Với chính sách dựa trên tài nguyên, bạn có thể chỉ định tài khoản AWS, Quản lý truy cập và nhận dạng AWS (IAM) hoặc vai trò IAM và các hành động chính xác của Kinesis Data Streams mà bạn muốn cấp quyền truy cập. Sau khi cấp quyền truy cập, bạn có thể đặt cấu hình hàm Lambda trong tài khoản khác để bắt đầu xử lý luồng dữ liệu thuộc tài khoản của mình. Điều này giúp giảm chi phí và đơn giản hóa quy trình xử lý dữ liệu vì bạn không còn phải sao chép dữ liệu truyền trực tuyến bằng hàm Lambda trong cả hai tài khoản. Việc chia sẻ quyền truy cập vào luồng dữ liệu của bạn hoặc người tiêu dùng đã đăng ký sẽ không phải trả thêm phí cho tài khoản của bạn. Việc sử dụng tài nguyên Kinesis Data Streams trên nhiều tài khoản sẽ tiếp tục được tính phí cho chủ sở hữu tài nguyên.

Trong bài đăng này, chúng tôi sử dụng Luồng dữ liệu Kinesis với tăng cường quạt ra tính năng này, trao quyền cho người tiêu dùng với thông lượng đọc chuyên dụng phù hợp với ứng dụng của họ. Theo mặc định, Kinesis Data Streams cung cấp thông lượng đọc được chia sẻ là 2 MB/giây trên mỗi phân đoạn giữa các thiết bị tiêu dùng, nhưng với phân xuất tăng cường, mỗi thiết bị tiêu dùng có thể tận hưởng thông lượng chuyên dụng là 2 MB/giây trên mỗi phân đoạn. Tính linh hoạt này cho phép bạn điều chỉnh liền mạch Luồng dữ liệu Kinesis theo yêu cầu cụ thể của mình, lựa chọn giữa phân xuất tăng cường cho thông lượng chuyên dụng hoặc thông lượng chia sẻ theo nhu cầu của bạn.

Tổng quan về giải pháp

Đối với giải pháp của mình, chúng tôi triển khai Luồng dữ liệu Kinesis trong Tài khoản 1 và Lambda với tư cách là người tiêu dùng trong Tài khoản 2 để nhận dữ liệu từ luồng dữ liệu. Sơ đồ sau minh họa kiến ​​trúc cấp cao.

Kiến trúc giải pháp tài khoản chéo Amazon KDS-Lambda

Việc thiết lập yêu cầu các yếu tố chính sau:

  • Luồng dữ liệu Kinesis trong Tài khoản 1 và hàm Lambda trong Tài khoản 2
  • Chính sách tài nguyên của Kinesis Data Streams trong Tài khoản 1, cho phép vai trò thực thi Lambda trên nhiều tài khoản thực hiện các thao tác trên luồng dữ liệu Kinesis
  • Vai trò thực thi Lambda trong Tài khoản 2 và chính sách tài nguyên người tiêu dùng phân xuất ra nâng cao trong Tài khoản 1, cho phép vai trò thực thi Lambda trên nhiều tài khoản thực hiện các thao tác trên luồng dữ liệu Kinesis

Để thiết lập, bạn sử dụng ba Hình thành đám mây AWS các mẫu để tạo các tài nguyên chính:

  • Mẫu CloudFormation 1 tạo các tài nguyên chính sau trong Tài khoản 1:
    • Luồng dữ liệu Kinesis
    • Người dùng phân xuất phân xuất tăng cường luồng dữ liệu Kinesis
  • Mẫu CloudFormation 2 tạo các tài nguyên chính sau trong Tài khoản 2:
    • Hàm Lambda dành cho người tiêu dùng
    • Vai trò thực thi hàm Lambda của người tiêu dùng
  • Mẫu CloudFormation 3 tạo tài nguyên sau trong Tài khoản 2:
    • Ánh xạ nguồn sự kiện hàm Lambda dành cho người tiêu dùng

Giải pháp hỗ trợ triển khai một Vùng và các mẫu CloudFormation phải được triển khai trong cùng một Vùng trên các tài khoản AWS khác nhau. Trong giải pháp này, chúng tôi sử dụng phân xuất tăng cường của Kinesis Data Streams, đây là phương pháp tốt nhất để triển khai kiến ​​trúc yêu cầu thông lượng lớn trên nhiều người dùng. Hoàn thành các bước trong phần sau để triển khai giải pháp này.

Điều kiện tiên quyết

Bạn phải có hai tài khoản AWS và các quyền cần thiết để chạy mẫu CloudFormation nhằm tạo các dịch vụ được đề cập trong kiến ​​trúc giải pháp. Bạn cũng cần Giao diện dòng lệnh AWS (AWS CLI) đã được cài đặt, phiên bản 2.15 trở lên.

Khởi chạy mẫu CloudFormation 1

Hoàn thành các bước sau để khởi chạy mẫu CloudFormation đầu tiên:

  1. Đăng nhập vào Bảng điều khiển quản lý AWS làm Tài khoản 1 và chọn Khu vực AWS thích hợp.
  2. Tải xuống và khởi chạy Mẫu CloudFormation 1 nơi bạn muốn triển khai luồng dữ liệu Kinesis của mình.
  3. Trong LambdaNgười tiêu dùngId tài khoản, nhập ID tài khoản người tiêu dùng Lambda của bạn và nhấp vào gửi. Quá trình triển khai mẫu CloudFormation sẽ mất vài phút để hoàn thành.
  4. Khi ngăn xếp hoàn tất, trên bảng điều khiển AWS CloudFormation, hãy điều hướng đến ngăn xếp Kết quả đầu ra tab và sao chép các giá trị của các tham số sau:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Bạn sẽ cần những giá trị này trong các bước sau.

Khởi chạy mẫu CloudFormation 2

Hoàn thành các bước sau để khởi chạy mẫu CloudFormation thứ hai:

  1. Đăng nhập vào bảng điều khiển bằng Tài khoản 2 và chọn Khu vực thích hợp.
  2. Tải xuống và khởi chạy Mẫu CloudFormation 2 nơi bạn muốn lưu trữ người tiêu dùng Lambda.
  3. Cung cấp các tham số đầu vào sau được ghi lại từ bước trước:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Mẫu CloudFormation tạo các tài nguyên chính sau:

  • Người tiêu dùng Lambda
  • Vai trò thực thi lambda

Vai trò thực thi của hàm Lambda là vai trò IAM cấp cho hàm quyền truy cập vào các dịch vụ và tài nguyên AWS. Tại đây, bạn tạo một vai trò thực thi Lambda có các quyền yêu cầu đối với Luồng dữ liệu Kinesis và lệnh gọi Lambda.

Quá trình triển khai mẫu CloudFormation sẽ mất vài phút để hoàn thành.

  1. Khi ngăn xếp hoàn tất, trên bảng điều khiển AWS CloudFormation, hãy điều hướng đến ngăn xếp Kết quả đầu ra tab và sao chép các giá trị của các tham số sau:
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. Chạy các lệnh AWS CLI sau trong Tài khoản 1 bằng cách sử dụng Đám mây AWS. Chúng tôi khuyên bạn nên sử dụng CloudShell vì nó sẽ có phiên bản AWS CLI mới nhất và tránh mọi loại lỗi.
    • KinesisStreamCreateResourcePolicyCommandLệnh – Điều này tạo ra chính sách tài nguyên trong Tài khoản 1 cho Kinesis Data Stream. Sau đây là chính sách tài nguyên mẫu:
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "StreamEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      "arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamSummary",
      "kinesis:ListShards",
      "kinesis:DescribeStream",
      "kinesis:GetRecords",
      "kinesis:GetShardIterator"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream"
      }
      ]
      }

    • KinesisStreamEFFOConsumerCreateResourcePolicyCommandLệnh – Điều này tạo ra chính sách tài nguyên cho trình tiêu dùng phân xuất tăng cường cho luồng dữ liệu Kinesis trong Tài khoản 1. Sau đây là chính sách tài nguyên mẫu:
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "ConsumerEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      " arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamConsumer",
      "kinesis:SubscribeToShard"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream/consumer/kds-cross-account-stream-efo-consumer:1706616477"
      }
      ]
      }

Bạn cũng có thể truy cập chính sách này trên bảng điều khiển Kinesis Data Streams, trong Tăng cường quạt ra, Tên người tiêu dùngChính sách dựa trên tài nguyên chia sẻ của người tiêu dùng.

Khởi chạy mẫu CloudFormation 3

Bây giờ, bạn đã tạo chính sách tài nguyên trong Tài khoản 1 cho luồng dữ liệu Kinesis và ứng dụng tiêu dùng phân xuất tăng cường, bạn có thể tạo ánh xạ nguồn sự kiện Lambda cho hàm Lambda tiêu dùng trong Tài khoản 2. Hãy hoàn thành các bước sau:

  1. Đăng nhập vào bảng điều khiển bằng Tài khoản 2 và chọn Khu vực thích hợp.
  2. Tải xuống và khởi chạy Mẫu CloudFormation 3 để cập nhật ngăn xếp bạn đã tạo bằng mẫu CloudFormation 2.

Mẫu CloudFormation tạo ánh xạ nguồn sự kiện Lambda.

Xác thực giải pháp

Tại thời điểm này, việc triển khai đã hoàn tất. Luồng dữ liệu Kinesis có sẵn để sử dụng tin nhắn và hàm Lambda sẽ nhận những tin nhắn này trong tài khoản đích. Để gửi tin nhắn mẫu tới luồng dữ liệu trong Tài khoản 1, hãy chạy lệnh AWS CLI sau bằng CloudShell:

aws kinesis put-record --stream-name kds-cross-account-stream --data sampledatarecord --partition-key samplepartitionkey3 --region <region id>

Hàm Lambda trong Tài khoản 2 có thể nhận tin nhắn và bạn có thể xác minh điều tương tự bằng cách sử dụng amazoncloudwatch nhật ký:

  1. Trên bảng điều khiển CloudWatch, chọn Nhật ký nhóm trong khung điều hướng.
  2. Xác định vị trí nhóm nhật ký /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. Chọn Nhóm nhật ký tìm kiếm để xem các thông điệp tường trình có liên quan. Sau đây là một tin nhắn ví dụ:
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

Làm sạch

Bạn nên dọn sạch tất cả tài nguyên mà bạn đã tạo trong bài đăng này để tránh mọi chi phí bổ sung.

Để dọn sạch tài nguyên của bạn, hãy xóa ngăn xếp CloudFormation tương ứng khỏi Tài khoản 1 và 2, đồng thời ngăn nhà sản xuất đẩy các sự kiện vào luồng dữ liệu Kinesis. Điều này đảm bảo rằng bạn không bị tính phí một cách không cần thiết.

Tổng kết

Trong bài đăng này, chúng tôi đã trình bày cách định cấu hình tích hợp Lambda nhiều tài khoản với Kinesis Data Streams bằng các chính sách dựa trên tài nguyên AWS. Điều này cho phép xử lý dữ liệu được đưa vào luồng trong một tài khoản AWS thông qua chức năng Lambda nằm trong một tài khoản khác. Để hỗ trợ những khách hàng sử dụng luồng dữ liệu Kinesis trong tài khoản trung tâm của họ và yêu cầu nhiều người tiêu dùng đọc dữ liệu từ đó, chúng tôi đã sử dụng tính năng phân xuất tăng cường của Kinesis Data Streams.

Để bắt đầu, hãy mở bảng điều khiển Kinesis Data Streams hoặc sử dụng API mới Chính sách tài nguyên để đính kèm chính sách tài nguyên vào luồng dữ liệu hoặc người tiêu dùng của bạn.


Giới thiệu về tác giả

Pratik Patel là Giám đốc tài khoản kỹ thuật cấp cao và chuyên gia phân tích phát trực tuyến. Anh ấy làm việc với khách hàng AWS và cung cấp hỗ trợ liên tục cũng như hướng dẫn kỹ thuật để giúp lập kế hoạch và xây dựng giải pháp bằng cách sử dụng các phương pháp hay nhất và chủ động giữ cho môi trường AWS của khách hàng hoạt động lành mạnh.

Yêu là Kiến trúc sư giải pháp cấp cao tại Amazon AWS ở Anh. Ông làm việc với các khách hàng năng lượng, tiện ích, sản xuất và ô tô về triển khai chiến lược, chuyên sử dụng AWS Streaming và các giải pháp phân tích dữ liệu nâng cao để mang lại kết quả kinh doanh tối ưu.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img