如何配置S3触发Lambda规则 排除*_processed.xlsx文件触发
结论
这个需求完全可以实现,不需要调整现有S3目录结构,也不用引入额外的事件路由服务,两种方案都能稳定落地,根据自己的配置权限选就行。
方案1:纯S3事件规则过滤(无无效Lambda触发,优先选)
你提到当前S3事件通知支持前缀、后缀过滤,实际上S3原生的前后缀过滤规则本身就支持否定匹配,属于同一套规则体系内的能力,不需要额外开通功能:
- 配置规则的触发事件为
s3:ObjectCreated:*(对象上传完成事件) - 前缀配置为你指定的目标文件夹路径,比如
target-folder/ - 配置两个后缀匹配规则:
- 正向匹配:后缀等于
.xlsx - 反向排除:后缀不等于
_processed.xlsx
配置完成后,只有同文件夹下后缀为.xlsx、且文件名结尾不是_processed.xlsx的原始上传文件会触发Lambda,处理生成的*_processed.xlsx文件会被规则直接过滤掉,完全不会触发Lambda,没有任何额外执行成本。
如果控制台界面没找到否定匹配的配置入口,用AWS CLI、CloudFormation或者Terraform部署规则的时候,给规则加NotSuffix参数设为_processed.xlsx就行,属于标准的S3事件过滤配置项。
- 正向匹配:后缀等于
方案2:基础S3过滤+Lambda入口熔断(全版本兼容,零配置门槛)
如果暂时没法配置S3的否定匹配规则,用这个通用方案就行,稳定性和方案1没有区别,额外成本可以忽略:
- 先按现有可见的配置项配S3事件:前缀填目标文件夹路径,后缀填
.xlsx,保证所有xlsx文件上传都能送到Lambda - 在Lambda处理逻辑的最开头加一段极简校验:从触发事件的S3对象记录里拿到文件key,直接判断key是否以
_processed.xlsx结尾,如果是,直接返回成功响应终止执行,不跑后续的文件处理逻辑。
这段校验逻辑通常执行时长不到100ms,产生的Lambda费用基本可以忽略,完全不会出现循环触发的问题,是很多团队默认用的兜底方案。
踩坑提醒:别用「处理完的文件先存到其他临时文件夹,再移动回目标文件夹」的思路绕,S3的移动操作本质是复制加删除,复制生成新对象时同样会触发对象创建事件,还是会碰到重复触发的问题,多此一举。
内容的提问来源于stack exchange,提问作者rahul
相关产品推荐
相关产品推荐

