Amplify React应用S3存储Lambda触发器未触发问题求助
问题排查与解决方案
1. 核对S3触发器的规则配置
- 确认事件类型:必须勾选
s3:ObjectCreated:*(覆盖所有文件创建场景),或者至少包含你上传时对应的事件(比如s3:ObjectCreated:Put/s3:ObjectCreated:Post),如果只选了其他类型事件,自然不会触发。 - 检查路径过滤规则:如果触发器设置了前缀(比如仅匹配
private/开头的文件),那上传到public/的文件会被过滤掉;后缀如果限定了非.pdf的格式,也会导致PDF上传不触发,先确认前缀/后缀和你的上传路径、文件类型匹配。 - 确认绑定桶的正确性:Amplify会为不同环境创建独立S3桶,检查触发器是否绑定到你实际上传文件的那个桶。
2. 检查Lambda的权限策略
S3桶需要有调用Lambda的权限,去Lambda控制台的「配置」→「权限」→「资源策略」,确认存在类似以下的授权语句:
{ "Version": "2012-10-17", "Id": "S3InvokeLambdaPolicy", "Statement": [ { "Sid": "AllowS3Trigger", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:s3:::你的目标S3桶名" } } } ] }
如果没有,要么手动添加该策略,要么删除现有触发器重新创建(AWS会自动生成权限)。
3. 确认Amplify的上传行为细节
- Amplify上传大文件可能用分段上传,只有分段上传完成时才会触发
s3:ObjectCreated:CompleteMultipartUpload事件,确保触发器包含该事件类型。 - 去S3控制台确认文件已完全上传,状态为「已完成」,排除临时文件未触发的情况。
4. 验证CloudWatch日志的准确性
- 检查Lambda对应的CloudWatch日志组,确认筛选的时间范围覆盖上传时段,或者查看Lambda「监控」页面的「调用次数」是否有增长——有时候不是没触发,是日志筛选没找到。
5. 检查S3桶的事件通知状态
直接进入S3桶的「属性」→「事件通知」,查看对应的通知规则是否处于「启用」状态,目标是否指向你的Lambda函数。偶尔会出现Lambda控制台配置触发器后,S3端规则未同步或被禁用的情况。
内容的提问来源于stack exchange,提问作者JCS
相关产品推荐
相关产品推荐

