我有一个由DynamoDB流触发的Lambda。Lambda进行一些处理,然后在SNS中创建有关主题的通知。理想情况下,我希望将整个新文档包括在发给SNS的通知中,以便下游客户端不必点击DynamoDB即可获取数据。
我遇到的问题是,来自DynamoDB流的数据是DynamoDB有线格式的(映射包括作为关键字的数据类型)。当我向下游客户端发送通知时,我不希望他们必须了解DynamoDB有线格式来解析消息(例如,如果我切换到新的基础数据存储,则必须重新创建该格式)。
显然,boto3客户端能够将这种格式解析为Python对象,是否有办法让我自己访问解析器?据我所知,它是从DynamoDB提取数据的一部分而被调用,但我找不到自己调用它的方法。
我有类似的情况,我使用了以下方法:
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
包含转换后的对象,而不是传递给处理程序的有线格式版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句