Lambda仅代码变更时被S3 putObject事件触发,该如何解决?
结论
该行为不属于Lambda的正常运行逻辑。Lambda的触发规则与函数代码是否变更完全无关,只要你配置的S3 putObject事件满足触发条件,Lambda就应当被正常调用,且生成对应的CloudWatch运行日志。
排查与修复步骤
- 核对S3事件通知配置
确认你配置的事件类型已勾选
All object create events或者对应你上传动作的事件分类;同时核对事件的前缀、后缀过滤规则,确认你上传的文件路径、后缀符合规则要求,没有被过滤规则拦截。 - 检查Lambda执行角色的日志写入权限
确认Lambda绑定的执行角色已附加包含CloudWatch日志写入权限的策略,所需权限动作如下:
若缺少上述权限,即使Lambda被触发也不会生成CloudWatch日志,会出现「函数未运行」的错觉。logs:CreateLogGroup logs:CreateLogStream logs:PutLogEvents - 检查S3调用Lambda的权限
确认Lambda的基于资源的策略中已允许对应S3桶调用该函数,你可以重新在S3控制台的事件通知页面重新配置一次触发器,系统会自动帮你补全该权限,无需手动编写策略。
- 查看Lambda调用指标确认触发状态
进入Lambda控制台的「监控」标签页,查看
Invocations(调用次数)指标:如果指标有对应你上传时间的增长,说明Lambda已被触发,问题出在日志权限上;如果指标没有增长,说明S3事件没有成功触发Lambda,回到前两步重新核对事件配置和调用权限即可。 - 排查限流与运行错误
若调用次数指标有增长,同时
Errors(错误)或Throttles(限流)指标也有对应增长,说明函数被触发后运行报错或被限流,根据错误信息对应修复代码、调整并发配置即可。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

