如何配置DynamoDB Stream仅在删除事件时触发Lambda函数?
如何让Lambda仅响应DynamoDB Stream的删除事件?
当然有办法!而且最优解是直接在DynamoDB触发器层面做事件过滤,从源头避免不必要的Lambda调用,完美解决你的成本问题。下面分两种方案详细说明:
方案一:使用DynamoDB触发器的事件过滤(推荐)
这是最省钱的方案,因为它会在触发Lambda之前就过滤掉非删除事件,完全不会产生无效的Lambda调用费用。操作步骤如下:
- 打开AWS Lambda控制台,找到你的目标函数
- 切换到配置标签页,在左侧菜单选择触发器
- 找到已配置的DynamoDB触发器,点击编辑按钮
- 滚动到事件过滤部分,点击添加过滤规则
- 在过滤规则的JSON输入框中,填入以下内容:
{ "eventName": [ "REMOVE" ] }
- 保存修改即可
这个规则会告诉DynamoDB Stream,只有当事件类型为REMOVE(也就是条目被删除)时,才将事件推送给Lambda。INSERT(新增条目)和MODIFY(修改条目)的事件会被直接过滤掉,不会触发你的Lambda函数。
方案二:在Lambda代码内部过滤(备选)
如果因为某些限制无法使用触发器层面的过滤(比如旧版本的Lambda配置),你可以在Lambda代码内部判断事件类型,跳过非删除事件。但注意:这个方法是在Lambda被调用后再过滤,所以还是会产生Lambda调用费用,只推荐在无法使用事件过滤的场景下使用。
以Python为例,代码示例如下:
import json def lambda_handler(event, context): # 遍历所有Stream事件记录 for record in event['Records']: # 跳过非删除事件 if record['eventName'] != 'REMOVE': continue # 在这里编写你的删除事件处理逻辑 # 比如获取被删除的条目数据 deleted_item = record['dynamodb']['OldImage'] print(f"处理已删除的条目: {json.dumps(deleted_item)}") return { 'statusCode': 200, 'body': json.dumps('删除事件处理完成') }
总结一下,优先选择方案一,它能从根本上减少不必要的Lambda调用,最大化节省成本;方案二作为临时替代方案,仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者qkhanhpro
相关产品推荐
相关产品推荐

