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

AWS S3 Put事件如何同时触发Lambda、SQS、SNS多服务?

实现S3 Put操作同时触发多服务目标

别担心,AWS S3其实完全支持给同一个存储桶的同一种事件配置多个目标——你之前可能只是没找到正确的配置路径而已。我来一步步帮你实现当Put操作发生时,同时触发Lambda、SQS和SNS:

一、通过AWS控制台配置(最直观)

  1. 打开S3控制台,定位到你的目标存储桶,切换到属性标签页,下拉找到「事件通知」模块。
  2. 点击「创建事件通知」,先填写基础配置:
    • 给通知起个清晰的名字(比如Put-Multi-Target-Trigger)
    • 在「事件类型」里,选择「所有对象创建事件」或者精准勾选「Put」操作(根据你的需求)
  3. 重点来了——添加多个目标:
    • 点击「添加目标」,第一个选择「Lambda函数」,从下拉列表里选你要触发的函数,完成后点击「保存更改」(别担心,还能继续加)
    • 回到事件编辑页面,再次点击「添加目标」,选择「SQS队列」,选中对应的队列,保存
    • 重复上述步骤,第三次添加目标为「SNS主题」,选中你的目标主题
  4. 所有目标添加完成后,点击页面底部的「保存更改」即可。

二、关键权限配置(必做,否则会触发失败)

S3需要有对应的权限才能触发这些服务,控制台通常会自动帮你配置部分权限,但如果遇到触发失败,手动检查以下内容:

1. Lambda权限

确保S3拥有调用Lambda函数的权限,可通过AWS CLI执行以下命令(替换占位符):

aws lambda add-permission --function-name YOUR_LAMBDA_FUNCTION_NAME \
--statement-id s3-event-trigger-permission \
--action "lambda:InvokeFunction" \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::YOUR_BUCKET_NAME

2. SQS权限

给SQS队列添加权限,允许S3向其发送消息。在SQS控制台的「权限」标签页,添加如下策略(替换占位符):

{
  "Version": "2008-10-17",
  "Id": "S3EventToSQS",
  "Statement": [
    {
      "Sid": "AllowS3SendMessage",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:YOUR_REGION:YOUR_ACCOUNT_ID:YOUR_QUEUE_NAME",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::YOUR_BUCKET_NAME"
        }
      }
    }
  ]
}

3. SNS权限

类似SQS,给SNS主题添加权限,允许S3发布消息。在SNS控制台的「权限」部分,添加如下策略(替换占位符):

{
  "Version": "2008-10-17",
  "Id": "S3EventToSNS",
  "Statement": [
    {
      "Sid": "AllowS3Publish",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:YOUR_REGION:YOUR_ACCOUNT_ID:YOUR_TOPIC_NAME",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::YOUR_BUCKET_NAME"
        }
      }
    }
  ]
}

三、通过CLI/API批量配置(适合自动化场景)

如果需要用代码或CLI批量配置,可以创建一个JSON配置文件(比如notification-config.json),内容如下:

{
  "LambdaFunctionConfigurations": [
    {
      "Id": "Put-Trigger-Lambda",
      "LambdaFunctionArn": "arn:aws:lambda:YOUR_REGION:YOUR_ACCOUNT_ID:function:YOUR_LAMBDA",
      "Events": ["s3:ObjectCreated:Put"]
    }
  ],
  "QueueConfigurations": [
    {
      "Id": "Put-Trigger-SQS",
      "QueueArn": "arn:aws:sqs:YOUR_REGION:YOUR_ACCOUNT_ID:YOUR_QUEUE",
      "Events": ["s3:ObjectCreated:Put"]
    }
  ],
  "TopicConfigurations": [
    {
      "Id": "Put-Trigger-SNS",
      "TopicArn": "arn:aws:sns:YOUR_REGION:YOUR_ACCOUNT_ID:YOUR_TOPIC",
      "Events": ["s3:ObjectCreated:Put"]
    }
  ]
}

然后执行CLI命令生效:

aws s3api put-bucket-notification-configuration --bucket YOUR_BUCKET_NAME --notification-configuration file://notification-config.json

小提示

如果你之前创建了多个单独的事件通知(每个对应一个目标),其实也能实现相同效果,但用「单事件多目标」的方式会更简洁,便于管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:47:21