如何为Lambda函数添加S3触发器 SAM配置不生效如何解决
故障原因和修复方案
你当前的配置存在2个核心问题导致触发不生效:
- 缺少Lambda访问S3桶的权限配置:你仅给函数配置了DynamoDB的访问权限,未授予S3桶的读取权限,S3推送事件后Lambda无权读取对象会直接报错,触发流程中断。
- 未显式声明S3事件的资源范围(可选但建议补充,避免同桶其他事件冲突)
修正后的SAM模板如下:
Resources: SecondFunction: Type: AWS::Serverless::Function Properties: CodeUri: second/ Handler: app.lambda_handler Runtime: python3.8 Policies: - DynamoDBCrudPolicy: TableName: "test_table" # 新增S3桶读取权限 - S3ReadPolicy: BucketName: !Ref PracticeBucket Events: S3Bucket: Type: S3 Properties: Bucket: !Ref PracticeBucket Events: 's3:ObjectCreated:*' # 可选:如果需要过滤前缀/后缀可以加下面的配置,不需要可以删除 # Filter: # S3Key: # Rules: # - Name: prefix # Value: uploads/ PracticeBucket: Type: AWS::S3::Bucket
部署后验证步骤
- 前往Lambda控制台查看「配置」-「触发器」页,确认已经存在对应S3桶的触发器,状态为已启用
- 前往S3桶控制台查看「属性」-「事件通知」,确认存在指向对应Lambda的通知规则
- 测试时注意不要上传0字节对象,部分运行时的默认处理逻辑会跳过0字节对象触发
内容的提问来源于stack exchange,提问作者Eugene Levy
相关产品推荐
相关产品推荐

