AWS新手求助:S3触发Lambda仅触发一次问题
解决S3触发Lambda仅首次生效的问题
刚接触AWS遇到这种情况太正常了,我帮你一步步排查可能的原因,把问题解决掉:
1. 先检查S3事件通知的核心配置
- 打开S3控制台,找到你的
my-s3-bucket-for-images存储桶,进入「属性」->「事件通知」,确认你创建的Lambda触发器仍然存在,并且:- 事件类型确实是「所有对象创建事件」,没有额外添加前缀/后缀过滤规则(比如不小心加了只触发
.jpg文件的过滤) - 触发器的目标Lambda函数是你配置的那一个,没有选错
- 事件类型确实是「所有对象创建事件」,没有额外添加前缀/后缀过滤规则(比如不小心加了只触发
2. 确认Lambda的资源策略允许S3调用
S3要触发Lambda,必须有调用Lambda的权限,这个权限是在Lambda的资源策略里配置的:
- 打开Lambda控制台,找到你的函数,进入「配置」->「权限」->「资源策略」
- 确保存在一条允许
s3.amazonaws.com调用该Lambda的策略,格式类似这样:{ "Version": "2012-10-17", "Id": "S3TriggerPermission", "Statement": [ { "Sid": "AllowS3Invoke", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的AWS区域:你的账号ID:function:你的Lambda函数名", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:s3:::my-s3-bucket-for-images" } } } ] }
如果这条策略不存在或者配置错误,S3就无法触发Lambda。你第一次能触发可能是创建触发器时自动生成了这条策略,但如果之后被误删或修改,就会失效。
3. 检查CloudWatch日志和Lambda执行状态
- 哪怕第二次上传没看到触发记录,也去CloudWatch的「日志组」里找到你的Lambda函数对应的日志组,看看有没有后续的执行日志(包括报错)。有时候Lambda执行报错了,但日志还在,能帮你定位问题。
- 另外,去Lambda控制台的「监控」->「指标」里,看看有没有「调用次数」的统计,确认第二次上传时有没有调用请求进来。如果调用次数为0,说明S3没发送事件;如果有调用次数但没日志,可能是Lambda执行被节流或失败了。
4. 排除其他小概率问题
- 确认Lambda函数和S3存储桶在同一个AWS区域:跨区域触发虽然支持,但偶尔会有延迟或配置兼容问题,尽量保持同区域。
- 试试上传不同名称的文件:如果是覆盖同名文件,理论上S3也会触发ObjectCreated事件,但有些特殊场景下可能有延迟,换个文件名测试更稳妥。
- 重新保存S3触发器配置:有时候控制台配置没及时生效,进入事件通知编辑页面,直接点「保存」,强制刷新配置。
测试建议
你可以先手动触发一次Lambda函数(控制台里点「测试」,随便填个测试事件),确认代码能正常打印I am triggered!!!,排除代码本身的问题。然后按照上面的步骤逐一排查,应该就能解决每次上传都触发Lambda的问题了。
内容的提问来源于stack exchange,提问作者tired and bored dev
相关产品推荐
相关产品推荐

