Lambda DynamoDB触发器事件过滤及相关技术问题咨询
DynamoDB触发器Lambda相关问题解答
问题1:过滤规则配置后Lambda未触发,哪里操作错误?
- 单过滤
eventName的规则{"eventName": ["INSERT"]}本身语法没问题,但要实现event_name=INSERT && valid=false的组合过滤,需要使用完整的DynamoDB流过滤规则语法,同时指定eventName和NewImage中的valid字段,正确规则示例:
{ "Filters": [ { "Pattern": "{\"eventName\": [\"INSERT\"], \"dynamodb\": {\"NewImage\": {\"valid\": {\"BOOL\": [false]}}}}" } ] }
- 额外需要确认两个关键点:
- 你的DynamoDB流捕获模式必须设置为
NEW_IMAGE(或NEW_AND_OLD_IMAGES),如果是KEYS_ONLY模式,流事件不会携带new_image数据,导致valid字段过滤条件无法匹配。 - 检查Lambda触发器的流起始位置:如果设置为“最新”,只有规则配置后新插入的符合条件的条目才会触发Lambda,之前的历史数据不会触发。
- 你的DynamoDB流捕获模式必须设置为
问题2:已指定触发器关联表,为什么table_name返回None?
- 这是因为你使用的Rust Lambda SDK(cargo lambda相关)的
Event结构体中,table_name字段依赖于SDK对eventSourceARN的解析。DynamoDB流事件本身不会在顶级字段返回表名,表名包含在eventSourceARN(格式为arn:aws:dynamodb:region:account-id:table/table-name/stream/stream-id)中,如果SDK未正确解析该ARN提取表名,就会返回None。 - 你可以手动从事件的
event_source_arn字段(若结构体包含该字段)中拆分提取表名,或者更换/升级SDK版本尝试修复解析问题。
问题3:控制台触发器详情中的“key”对应原始Event中的什么内容?
- 控制台显示的“key”对应你日志中
StreamRecord下的keys字段(即keys: {"id": String("___")})。 - 它是DynamoDB表的主键集合,包含分区键(若为复合主键则同时包含排序键),用于唯一标识流事件对应的变更条目,DynamoDB流会在任何数据变更事件中携带主键信息,控制台将其简化显示为“key”。
内容的提问来源于stack exchange,提问作者kenta_desu
相关产品推荐
相关产品推荐

