You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Lambda程序化上传S3文件时,触发Lambda未执行的问题求助

问题原因及解决方案

最可能的原因:S3事件通知的高级筛选规则排除了Lambda角色的上传

当通过Lambda的IAM角色(AssumedRole身份)程序化上传S3对象时,如果事件通知的高级筛选规则中设置了仅允许IAMUser身份的操作,就会导致Lambda上传的对象无法触发事件——而手动上传使用的是你的IAM用户身份(IAMUser),因此可以正常触发。

排查与解决步骤

  1. 检查S3事件通知的筛选规则

    • 登录AWS控制台,进入目标S3存储桶的「属性」→「事件通知」
    • 找到绑定处理Lambda的通知规则,查看「高级筛选条件」
    • 如果存在类似userIdentity.type等于IAMUser的筛选条件,删除该规则或添加AssumedRole作为允许值
  2. 验证CloudTrail日志确认触发情况

    • 打开CloudTrail控制台,搜索目标S3存储桶的PutObject事件
    • 查看事件的userIdentity.type字段:手动上传为IAMUser,Lambda上传为AssumedRole
    • 同时搜索是否有来自S3的LambdaInvoke事件:如果Lambda上传后没有该事件,说明筛选规则阻止了触发;如果有但Lambda未执行,再检查Lambda的权限配置
  3. 确认CDK配置无隐含筛选

    • 检查你的CDK代码是否在S3EventSource中添加了未注意到的筛选条件(如前缀、后缀或高级筛选)
    • 示例中你只指定了events: [s3.EventType.OBJECT_CREATED],但如果有其他筛选(比如filters参数),需要确保Lambda上传的对象符合条件
  4. 其他排查点

    • 确认Lambda上传的对象路径(object_key)与手动上传的路径完全一致,避免因前缀/后缀筛选不匹配导致无法触发
    • 检查S3对象的存储类:如果使用了归档类存储(如Glacier),事件触发会延迟至对象完成归档,改为标准存储类测试
    • 验证boto3的put_object调用未设置特殊参数(如StorageClass、RequestPayer)影响事件触发

补充说明

如果以上步骤都无法解决,建议:

  • 临时创建一个测试Lambda,仅输出S3事件内容,绑定相同的S3事件通知,测试Lambda上传是否能触发该测试函数
  • 检查处理Lambda的CloudWatch日志,确认是否有被触发但执行出错的记录(虽然你说无报错,但需排除静默失败)

内容的提问来源于stack exchange,提问作者Jason Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:46:05