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

AWS DataSync同步S3桶触发Lambda函数两次问题求助

解决AWS DataSync同步后触发S3 Lambda两次的问题

这问题挺常见的,根源在于你开启了DataSync的完整性校验——DataSync的工作流程是:

  • 先将文件通过Put操作写入桶B
  • 完成完整性校验后,会再发起一次Put操作更新文件的元数据(比如校验和相关字段)
    这两次操作都会触发ObjectCreated:Put事件,时间差刚好对应校验的耗时,所以Lambda会被触发两次。

给你几个可行的解决办法:

1. 给S3事件添加过滤规则

直接在S3桶B的Lambda触发器里配置过滤条件,把仅更新元数据的事件排除:

  • 打开桶B的事件通知设置,找到绑定的Lambda触发器
  • 添加过滤规则:设置x-amz-metadata-directive不等于REPLACE
    (DataSync更新元数据时会携带该请求头为REPLACE,首次上传文件时这个头要么是COPY要么不存在,实际测试后可微调)

2. 在Lambda内部实现去重逻辑

如果不想修改S3配置,可以在Lambda函数里加去重判断:

  • 从触发事件中提取对象键和事件时间戳
  • 用DynamoDB存储最近处理过的对象记录(比如保留30秒的窗口期),每次处理前先查询,若该对象在最近30秒内已经处理过,直接返回成功即可
  • 也可以对比S3对象的ETag,两次触发事件对应的ETag是一致的,也能用来判断是否为重复触发

3. 关闭DataSync的完整性校验(不推荐)

如果业务对数据一致性要求不高,可以关闭DataSync的传输后校验,但这会失去数据完整性保障,除非你能接受这个风险,否则不建议采用此方案

内容的提问来源于stack exchange,提问作者Ziv M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:59:57