Phát trực tuyến DynamoDB với Lambda

Phat Truc Tuyen Dynamodb Voi Lambda



Luồng DynamoDB là một tính năng trong Amazon DynamoDB cho phép bạn nhận luồng thay đổi hoặc thay đổi dữ liệu theo thời gian thực được thực hiện cho bảng DynamoDB của bạn. Bạn có thể sử dụng tính năng này để xây dựng các ứng dụng phản ứng với các thay đổi dữ liệu trong bảng DynamoDB, chẳng hạn như cập nhật bộ đệm và gửi thông báo.

Tất nhiên, bạn cũng có thể sử dụng Luồng DynamoDB để kích hoạt các quy trình xuôi dòng và chức năng AWS Lambda. Lambda, theo định nghĩa, là một dịch vụ điện toán serverless chạy mã của bạn để phản hồi các sự kiện và tự động quản lý tài nguyên điện toán cho bạn.

Bạn có thể sử dụng Lambda để viết mã bằng Node.js, Python, Java hoặc C# để xử lý các bản ghi luồng và thực hiện các hành động thích hợp. Lợi ích chính của việc tích hợp Luồng DynamoDB với Lambda là Lambda cho phép bạn chạy các dịch vụ hoặc mã ứng dụng được hỗ trợ mà không cần quản trị.







Cách sử dụng Luồng AWS DynamoDB với Lambda

Mặc dù có thể tạo một hàm Lambda sử dụng các sự kiện và lần xuất hiện từ Luồng DynamoDB, nhưng quá trình này có thể khá phức tạp, đặc biệt là trong lần thử đầu tiên của bạn. Các bước sau đây sẽ giúp:



Bước 1: Đảm bảo rằng Hệ thống của bạn đáp ứng các điều kiện tiên quyết

Quy trình này sẽ chỉ thành công nếu bạn biết các quy trình và thao tác Lambda cơ bản. Vì vậy, đây là lần đầu tiên bạn nên làm để đảm bảo rằng hiểu biết của bạn về Lambda ở mức trên trung bình.



Điều kiện tiên quyết thứ hai đáng xem xét là xác nhận phiên bản AWS của hệ thống của bạn. Bạn có thể sử dụng lệnh sau:





phiên bản aws

Kết quả cho lệnh được cung cấp sẽ giống như sau:

aws-cli/ 2 .x.x Trăn/ 3 .x.xLinux/ 4 .x.x-xxx-std botocore/ 2 .x.x

Phản hồi mẫu đã cho chứa phiên bản đã cài đặt của AWS CLI ( aws-cli/2.x.x ), phiên bản Python ( Python/3.x.x ) và hệ điều hành ( Linux/4.x.x-xxx-std ). Phần cuối cùng của phản hồi xác định phiên bản thư viện Botocore mà AWS CLI của bạn chạy trên đó ( botocore/2.x.x ).



Do đó, bạn sẽ kết thúc với một cái gì đó như thế này:

Bước 2: Tạo Vai trò Thực thi

Bước tiếp theo là tạo vai trò thực thi trong AWS CLI. Vai trò thực thi là vai trò AWS Identity and Access Management (IAM) do một dịch vụ AWS đảm nhận để thay mặt bạn thực hiện các tác vụ. Nó cung cấp cho bạn quyền truy cập vào các tài nguyên AWS mà bạn sẽ cần trong quá trình thực hiện.

Bạn có thể tạo một vai trò bằng cách sử dụng lệnh sau:

vai trò tạo aws iam \

--role-name LambdaDynamoDBExecutionRole \

--assume-role-policy-file file://assume-role-policy.json \

--sự miêu tả ' AWSLambdaDynamoDBExecutionVai trò' \

--tên dịch vụ lambda.amazonaws.com

Lệnh trước là lệnh AWS CLI để tạo vai trò. Bạn cũng có thể sử dụng Bảng điều khiển quản lý Amazon để tạo vai trò. Khi bạn đang ở bảng điều khiển IAM, hãy mở vai trò trang và nhấp vào Tạo vai trò cái nút.

Tiến hành nhập như sau:

  • Tổ chức đáng tin cậy: Lambda
  • Tên vai trò: vai trò lambda-dynamodb
  • Quyền: AWSLambdaDynamoDBExecutionRole

Bạn cũng có thể sử dụng Python bằng cách cài đặt AWS SDK cho Python trước:

cài đặt pip boto3

Bước 3: Kích hoạt Luồng DynamoDB trên bàn của bạn

Bạn cần bật Luồng DynamoDB trên bàn của mình. Đối với hình minh họa này, chúng tôi sử dụng Boto3, AWS SDK cho Python. Lệnh sau sẽ giúp:

nhập boto3

# Kết nối với dịch vụ DynamoDB
máy phát điện = boto3.client( 'máy phát điện' )

# Bật luồng DynamoDB trên bảng 'my-table'
phản hồi = dynamodb.update_table(
Tên bảng= 'mytable' ,
StreamSpecification={
'Đã kích hoạt luồng' : Thật,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Kiểm tra phản hồi để đảm bảo luồng đã được bật thành công
nếu phản hồi [ 'Thông số luồng' ][ 'Đã kích hoạt luồng' ]:
in( 'Đã bật thành công luồng DynamoDB' )
khác:
in( 'Lỗi khi bật luồng DynamoDB' )

Mã này cho phép truyền trực tuyến DynamoDB trên bảng “mytable”. Truyền trực tuyến cả hình ảnh mới và cũ của các mục ngay khi có bất kỳ thay đổi nào. Bạn có thể chọn chỉ phát trực tuyến các hình ảnh mới ngay khi StreamViewType thành “NEW_IMAGE”.

Đáng chú ý là việc chạy mã này chỉ có thể kích hoạt các luồng trên bảng của bạn sau một thời gian. Thay vào đó, quá trình này có thể mất một thời gian. Bạn có thể sử dụng phương thức description_table để kiểm tra trạng thái của luồng.

Bước 4: Tạo Hàm Lambda

Bước tiếp theo là tạo một hàm Lambda để kích hoạt luồng DynamoDB. Các bước sau đây sẽ giúp:

  • Mở bảng điều khiển AWS Lambda và nhấp vào tab “Tạo chức năng”. Trên trang “Tạo chức năng”, chọn “Tác giả từ đầu” và nhập tên cho chức năng của bạn. Bạn cũng cần nhập thời gian chạy của mình vào thời điểm này. Chúng tôi đã chọn Python cho hình minh họa này.
  • Trong phần “Chọn hoặc tạo vai trò thực thi”, hãy chọn “Tạo vai trò mới với quyền Lambda cơ bản” để tạo vai trò IAM với các quyền cần thiết cho chức năng Lambda của bạn.
  • Nhấp vào nút “Tạo hàm” để tạo hàm Lambda của bạn.
  • Trên trang “Cấu hình” cho chức năng của bạn, hãy cuộn xuống phần “Nhà thiết kế” và nhấp vào tab “Thêm trình kích hoạt”.
  • Trong hộp “Cấu hình trình kích hoạt” xuất hiện, hãy chọn “DynamoDB” từ menu thả xuống “Trigger”.
  • Chọn bảng DynamoDB mà bạn muốn sử dụng để kích hoạt chức năng. Sau khi hoàn tất, hãy chọn xem bạn muốn chức năng này được kích hoạt trên tất cả các cập nhật của bảng hay chỉ trên các cập nhật cụ thể (chẳng hạn như cập nhật cho các cột cụ thể).
  • Nhấp vào nút “Thêm” để tạo trình kích hoạt.
  • Trong trình chỉnh sửa “Mã hàm”, hãy viết mã Python cho hàm của bạn. Bạn có thể sử dụng đối tượng sự kiện được chuyển đến chức năng của mình để truy cập dữ liệu kích hoạt chức năng.
  • Nhấp vào nút “Lưu” để lưu chức năng.

Đó là tất cả những gì xảy ra khi tạo hàm Lambda! Chức năng của bạn hiện được kích hoạt bất cứ khi nào có bản cập nhật cho bảng DynamoDB đã chỉ định.

Sau đây là ví dụ về một hàm Python đơn giản mà luồng DynamoDB có thể kích hoạt:

def lambda_handler(sự kiện, ngữ cảnh):

để ghi lại sự kiện [ 'Hồ sơ' ]:

in (bản ghi [ 'máy phát điện' ][ 'Hình ảnh mới' ])

Hàm này lặp qua các bản ghi trong đối tượng sự kiện và in ra hình ảnh mới của mục trong bảng DynamoDB kích hoạt hàm này.

Bước 5: Kiểm tra Hàm Lambda

Để kiểm tra chức năng Lambda mà luồng DynamoDB có thể kích hoạt, bạn có thể sử dụng boto3 thư viện để truy cập API DynamoDB và gọi phương pháp của Lambda client để kích hoạt chức năng.

Đây là một ví dụ về cách thực hiện:

nhập boto3

# Kết nối với dịch vụ DynamoDB
máy phát điện = boto3.client( 'máy phát điện' )

# Kết nối với dịch vụ Lambda
lambda_client = boto3.client( 'lambda' )

# Chèn một mục vào bảng 'my-table'
phản hồi = dynamodb.put_item(
Tên bảng= 'mytable' ,
Mục = {
'Tôi' :{ 'N' : '123' },
'Tên' :{ 'S' : 'Joel Austin},
'
tuổi ':{' N ':' 3. 4 '}
}
)

# Kiểm tra phản hồi để đảm bảo mục đã được chèn thành công
nếu phản hồi ['
Phản hồiSiêu dữ liệu '][' Trạng thái HTTPMã '] == 200:
print('Hàng đã chèn thành công')
khác:
print('Lỗi khi chèn mục')

# Kích hoạt chức năng Lambda đã đăng ký với '
bảng của tôi ' bàn
phản hồi = lambda_client.invoke(
Tên chức năng ='
chức năng của tôi ',
Kiểu gọi ='
Biến cố ',
Loại nhật ký ='
Đuôi ',
Tải trọng ='
{ 'Hồ sơ' :[{ 'máy phát điện' :{ 'Hình ảnh mới' :{ 'Tôi' :{ 'N' : '123' }, 'Tên' :{ 'S' : 'Joel Austin' }, 'tuổi' :{ 'N' : '3. 4' }}}}}]} '
)

# Kiểm tra phản hồi để đảm bảo chức năng được kích hoạt thành công
nếu phản hồi ['
Mã trạng thái '] == 202:
print('Chức năng Lambda được kích hoạt thành công')
khác:
print('Lỗi kích hoạt hàm Lambda')

Mã này đầu tiên chèn một mục vào bàn của tôi bảng và sau đó kích hoạt chức năng của tôi hàm lambda bằng cách gửi tải trọng sự kiện mẫu tới hàm bằng cách sử dụng gọi phương pháp. Tải trọng sự kiện mô phỏng một sự kiện truyền trực tuyến DynamoDB bao gồm hình ảnh mới của mục vừa được chèn.

Sau đó, bạn có thể kiểm tra nhật ký của hàm Lambda để xem liệu nó có kích hoạt và xử lý dữ liệu sự kiện thành công hay không.

Phần kết luận

Điều quan trọng cần lưu ý là bạn có thể gọi nhiều lần cho cùng một bản ghi luồng mà luồng DynamoDB có thể kích hoạt chức năng Lambda. Lý do chính đằng sau điều này là các bản ghi luồng cuối cùng nhất quán và có thể xử lý cùng một bản ghi nhiều lần bằng hàm Lambda. Điều quan trọng là phải thiết kế hàm Lambda của bạn để xử lý trường hợp này một cách chính xác.