2016-04-11 4 views
6

私は、DynamoDBストリームによってトリガーされているラムダを持っています。 Lambdaは何らかの処理を行い、SNSのトピックに関する通知を作成します。理想的には、下流のクライアントがDynamoDBを使用してデータを取得する必要がないように、SNSに送信される通知に新しい文書全体を含めることが理想的です。boto3でDynamoDBワイヤプロトコルをネイティブPythonオブジェクトに手動で変換する方法は?

私が遭遇する問題は、DynamoDBストリームからのデータがDynamoDBワイヤ形式(データ型をキーとして含む)であることです。ダウンストリームクライアントに通知を送信するときに、メッセージを解析するためにDynamoDBワイヤフォーマットを理解する必要はありません(たとえば、新しい基本データストアに切り替えると、そのフォーマットを再作成する必要があります)。

明らかに、boto3クライアントはこの形式をPythonオブジェクトに解析できますが、私自身がパーサーにアクセスする方法はありますか?私が知る限り、DynamoDBからデータを取得する際に呼び出されますが、私自身で呼び出す方法はありません。

答えて

9

私は似たような状況があると私はこのような、次のアプローチを使用:

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]) 

このアプローチは、私のために動作します。結果の辞書dには、ハンドラに渡されるワイヤ形式のバージョンではなく、変換されたオブジェクトが含まれています。

関連する問題