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

如何在DynamoDB记录因TTL过期删除时触发Lambda函数并获取相关记录信息

如何在DynamoDB记录因TTL过期删除时触发Lambda函数并获取相关记录信息

我来帮你搞定这个问题!其实AWS专门提供了针对TTL删除事件的DynamoDB流特性,能完美满足你的需求,下面一步步拆解实现方案:

一、启用DynamoDB流并配置正确的视图类型

首先要给你的DynamoDB表开启流,并且选择合适的视图类型,这样才能拿到被删除记录的完整数据:

  • 登录DynamoDB控制台,找到目标表,进入「流」标签页
  • 点击「启用」,在视图类型中选择OLD_IMAGE或者NEW_AND_OLD_IMAGES(前者只返回被删除的旧记录,后者会包含新旧数据,按需选择即可)
  • 保存配置后,DynamoDB就会把包括TTL删除在内的所有数据变更事件发送到流中

二、配置Lambda触发器并精准识别TTL删除事件

接下来把DynamoDB流绑定到你的Lambda函数,然后在代码里过滤出TTL触发的删除操作:

  1. 在Lambda控制台,找到你的函数,进入「触发器」标签页,点击「添加触发器」
  2. 选择「DynamoDB」作为触发器类型,选择刚才配置了流的表,设置合适的批量大小(比如100)和起始位置(建议选「最新」),保存配置
  3. 在Lambda代码里,通过流事件的userIdentity字段判断是否为TTL删除:
    当记录是被TTL自动删除时,eventName会是REMOVE,同时userIdentity.type为Service,userIdentity.principalId为dynamodb.amazonaws.com。下面是Node.js的示例代码:
    exports.handler = async (event) => {
      for (const record of event.Records) {
        // 精准过滤TTL触发的删除事件
        if (record.eventName === 'REMOVE' && 
            record.userIdentity?.type === 'Service' && 
            record.userIdentity?.principalId === 'dynamodb.amazonaws.com') {
          // 获取被删除的记录完整数据
          const deletedItem = record.dynamodb.OldImage;
          console.log('TTL过期删除的记录详情:', deletedItem);
          // 在这里编写你的业务处理逻辑
        }
      }
      return { statusCode: 200, body: '处理完成' };
    };
    

三、关于你之前尝试方案的补充说明

  • 普通DynamoDB触发器:你之前觉得没法区分删除原因,其实是没注意到流事件里的userIdentity标识,这个字段是区分TTL自动删除和手动/其他删除的关键,用上面的判断逻辑就能解决
  • CloudWatch告警:这个方案确实不适合,因为告警没法直接传递具体的删除记录数据,还容易出现重复触发的问题,完全没必要用
  • 自定义日志组:处理日志的成本远高于直接用DynamoDB流,流已经提供了结构化的事件数据,能直接拿到删除记录的详情,所以不需要折腾日志组

备注:内容来源于stack exchange,提问作者Tarkeshwar Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:09:33