使用S3预签名URL上传文件时AWS Lambda触发器无法触发问题
问题排查与解决方案
首先明确结论:该场景不需要为Lambda配置额外更高权限,问题根源并非Lambda侧权限不足,而是S3事件通知的触发规则不匹配,按以下优先级排查即可:
- 核对S3事件通知的触发事件类型
手动上传文件默认触发s3:ObjectCreated:Put类型的事件,很多用户配置触发器时只会选中该事件类型。但如果通过预签名URL上传时使用了分片上传(Multipart Upload,大文件上传的常用方案),分片上传完成后触发的是s3:ObjectCreated:CompleteMultipartUpload事件,不在你配置的触发范围内自然不会调用Lambda。
通用解决方案是直接将触发事件设置为All object create events,可以覆盖Put、Post、Copy、CompleteMultipartUpload四类所有对象创建场景。 - 检查S3事件通知的过滤规则
如果你为触发器配置了前缀/后缀过滤规则(例如仅触发images/路径下的文件、仅触发.jpg后缀的文件),请确认通过预签名URL上传的文件的Key完全匹配过滤规则。如果预签名URL生成时指定的Key不符合过滤规则,文件上传成功也不会触发事件。 - 排查S3存储桶的事件拦截配置
如果你开启了S3存储桶的访问控制规则、事件排除规则,或者生成预签名URL时为对象指定了特殊的标签/ACL,刚好命中事件拦截规则,也会导致事件不会下发到Lambda触发器。
如果以上排查后仍未解决问题,可以开启S3存储桶的EventBridge集成,在EventBridge的事件日志中查看预签名URL上传时是否生成了对应的S3事件,再进一步核对触发器的匹配逻辑。
内容的提问来源于stack exchange,提问作者Bemz
相关产品推荐
相关产品推荐

