You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:06:55