S3对象创建事件触发Lambda无限调用,该现象是否正常?
问题分析:Lambda无限调用的原因及解决办法
哥们儿,这绝对不是预期行为,而是因为你配置的S3触发规则和Lambda的操作形成了循环触发,属于可避免的配置故障。
为什么会无限调用?
你的Lambda监听了S3存储桶的object-created(All)事件,这个事件会响应所有对象的创建动作——包括你Lambda函数自己上传output.csv的操作:
- 当有人上传
input.csv到桶里,触发Lambda执行 - Lambda处理完成后,把
output.csv上传到同一桶,这个上传动作又会触发object-created事件 - 事件再次调用Lambda,哪怕这次函数处理的是
output.csv(如果你的代码没做过滤),执行后又会上传output.csv(可能覆盖原文件),再次触发事件,如此无限循环
怎么解决这个问题?
给你几个实用的解决方案,任选其一就行:
- 添加S3事件过滤规则:修改S3的触发配置,只监听特定前缀或后缀的对象创建。比如把
input.csv放在input/目录下,事件只监听input/前缀的对象;而把output.csv存到output/目录下,这样上传输出文件时不会触发事件。 - 在Lambda里加判断逻辑:在函数开头检查触发事件中的对象键(文件名),如果不是
input.csv就直接退出,不执行后续处理。比如用Python代码示例:# 函数开头的过滤逻辑 s3_key = event['Records'][0]['s3']['object']['key'] if s3_key != 'input.csv': return { 'statusCode': 200, 'body': '跳过非目标文件处理' } - 分离输入输出存储桶:把修改后的
output.csv上传到另一个独立的S3存储桶,彻底隔离触发源,从根本上避免循环。
内容的提问来源于stack exchange,提问作者Nirmalraj Selvaraj
相关产品推荐
相关产品推荐

