AWS S3 Put事件如何同时触发Lambda、SQS、SNS多服务?
实现S3 Put操作同时触发多服务目标
别担心,AWS S3其实完全支持给同一个存储桶的同一种事件配置多个目标——你之前可能只是没找到正确的配置路径而已。我来一步步帮你实现当Put操作发生时,同时触发Lambda、SQS和SNS:
一、通过AWS控制台配置(最直观)
- 打开S3控制台,定位到你的目标存储桶,切换到属性标签页,下拉找到「事件通知」模块。
- 点击「创建事件通知」,先填写基础配置:
- 给通知起个清晰的名字(比如
Put-Multi-Target-Trigger) - 在「事件类型」里,选择「所有对象创建事件」或者精准勾选「Put」操作(根据你的需求)
- 给通知起个清晰的名字(比如
- 重点来了——添加多个目标:
- 点击「添加目标」,第一个选择「Lambda函数」,从下拉列表里选你要触发的函数,完成后点击「保存更改」(别担心,还能继续加)
- 回到事件编辑页面,再次点击「添加目标」,选择「SQS队列」,选中对应的队列,保存
- 重复上述步骤,第三次添加目标为「SNS主题」,选中你的目标主题
- 所有目标添加完成后,点击页面底部的「保存更改」即可。
二、关键权限配置(必做,否则会触发失败)
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
相关产品推荐
相关产品推荐

