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

AWS新手求助:S3触发Lambda仅触发一次问题

解决S3触发Lambda仅首次生效的问题

刚接触AWS遇到这种情况太正常了,我帮你一步步排查可能的原因,把问题解决掉:

1. 先检查S3事件通知的核心配置

  • 打开S3控制台,找到你的my-s3-bucket-for-images存储桶,进入「属性」->「事件通知」,确认你创建的Lambda触发器仍然存在,并且:
    • 事件类型确实是「所有对象创建事件」,没有额外添加前缀/后缀过滤规则(比如不小心加了只触发.jpg文件的过滤)
    • 触发器的目标Lambda函数是你配置的那一个,没有选错

2. 确认Lambda的资源策略允许S3调用

S3要触发Lambda,必须有调用Lambda的权限,这个权限是在Lambda的资源策略里配置的:

  • 打开Lambda控制台,找到你的函数,进入「配置」->「权限」->「资源策略」
  • 确保存在一条允许s3.amazonaws.com调用该Lambda的策略,格式类似这样:
    {
      "Version": "2012-10-17",
      "Id": "S3TriggerPermission",
      "Statement": [
        {
          "Sid": "AllowS3Invoke",
          "Effect": "Allow",
          "Principal": {
            "Service": "s3.amazonaws.com"
          },
          "Action": "lambda:InvokeFunction",
          "Resource": "arn:aws:lambda:你的AWS区域:你的账号ID:function:你的Lambda函数名",
          "Condition": {
            "ArnLike": {
              "AWS:SourceArn": "arn:aws:s3:::my-s3-bucket-for-images"
            }
          }
        }
      ]
    }
    

如果这条策略不存在或者配置错误,S3就无法触发Lambda。你第一次能触发可能是创建触发器时自动生成了这条策略,但如果之后被误删或修改,就会失效。

3. 检查CloudWatch日志和Lambda执行状态

  • 哪怕第二次上传没看到触发记录,也去CloudWatch的「日志组」里找到你的Lambda函数对应的日志组,看看有没有后续的执行日志(包括报错)。有时候Lambda执行报错了,但日志还在,能帮你定位问题。
  • 另外,去Lambda控制台的「监控」->「指标」里,看看有没有「调用次数」的统计,确认第二次上传时有没有调用请求进来。如果调用次数为0,说明S3没发送事件;如果有调用次数但没日志,可能是Lambda执行被节流或失败了。

4. 排除其他小概率问题

  • 确认Lambda函数和S3存储桶在同一个AWS区域:跨区域触发虽然支持,但偶尔会有延迟或配置兼容问题,尽量保持同区域。
  • 试试上传不同名称的文件:如果是覆盖同名文件,理论上S3也会触发ObjectCreated事件,但有些特殊场景下可能有延迟,换个文件名测试更稳妥。
  • 重新保存S3触发器配置:有时候控制台配置没及时生效,进入事件通知编辑页面,直接点「保存」,强制刷新配置。

测试建议

你可以先手动触发一次Lambda函数(控制台里点「测试」,随便填个测试事件),确认代码能正常打印I am triggered!!!,排除代码本身的问题。然后按照上面的步骤逐一排查,应该就能解决每次上传都触发Lambda的问题了。

内容的提问来源于stack exchange,提问作者tired and bored dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:17:52