2016-04-11 29 views
6

Tôi có một Lambda đang được kích hoạt bởi một luồng DynamoDB. Lambda thực hiện một số xử lý và sau đó tạo một thông báo về một chủ đề trong SNS. Lý tưởng nhất là tôi muốn bao gồm toàn bộ tài liệu mới trong thông báo đi ra ngoài để SNS để khách hàng hạ lưu không phải nhấn DynamoDB để có được dữ liệu.Làm thế nào để chuyển đổi từ giao thức dây DynamoDB sang đối tượng Python gốc bằng tay với boto3?

Sự cố tôi đang gặp phải là dữ liệu đến từ luồng DynamoDB ở định dạng dây DynamoDB (bản đồ bao gồm loại dữ liệu là khóa). Khi tôi gửi thông báo tới các máy khách hạ lưu, tôi không muốn họ phải hiểu định dạng dây DynamoDB để phân tích cú pháp thông điệp (ví dụ nếu tôi chuyển sang kho lưu trữ dữ liệu cơ bản mới thì tôi phải tạo lại định dạng đó).

Rõ ràng trình khách boto3 có khả năng phân tích định dạng này thành đối tượng Python, có cách nào để tôi tự truy cập vào trình phân tích cú pháp không? Theo như tôi có thể nói nó được gọi là một phần của lấy dữ liệu từ DynamoDB nhưng tôi không thể tìm thấy một cách để gọi nó trên của riêng tôi.

Trả lời

9

Tôi có một tình huống tương tự và tôi đã sử dụng sau đây một cách tiếp cận như thế này:

from boto3.dynamodb.types import TypeDeserializer 

deser = TypeDeserializer() 

... 
<in handler> 
    for record in event['Records']: 
     old = record['dynamodb'].get('OldImage') 
     new = record['dynamodb'].get('NewImage') 
     if old: 
      d = {} 
      for key in old: 
       d[key] = deser.deserialize(old[key]) 

Cách tiếp cận này làm việc cho tôi. Từ điển kết quả d chứa đối tượng được chuyển đổi thay vì phiên bản định dạng dây được truyền cho trình xử lý.

Các vấn đề liên quan