演练:为存储桶配置通知(SNS 主题或 SQS 队列)
您可以使用 Amazon Simple Notification Service (Amazon SNS) 或 Amazon Simple Queue Service (Amazon SQS) 接收 Amazon S3 通知。在此演练中,您将使用 Amazon SNS 主题和 Amazon SQS 队列向存储桶添加通知配置。
演练摘要
此演练可以帮助您执行以下操作:
-
将
s3:ObjectCreated:*
类型的事件发布到 Amazon SQS 队列。 -
将
s3:ReducedRedundancyLostObject
类型的事件发布到 Amazon SNS 主题。
有关通知配置的信息,请参阅 使用 Amazon SQS、Amazon SNS 和 Lambda。
您可以使用控制台执行这些步骤,无需编写任何代码。此外,还提供了使用适用于 Java 和 .NET 的 Amazon 软件开发工具包的代码示例,以帮助您通过编程方式添加通知配置。
该过程包括以下步骤:
-
创建 Amazon SQS 队列。
使用 Amazon SQS 控制台创建 SQS 队列。您可以通过编程方式访问 Amazon S3 发送到队列的所有消息。但对于此演练,您在控制台中验证通知消息。
您可将访问策略附加到队列以授予 Amazon S3 发布消息的权限。
-
创建 Amazon SNS 主题。
使用 Amazon SNS 控制台创建 SNS 主题并订阅该主题。这样,发布到此项目的所有事件都传送给您。指定电子邮件作为通信协议。创建主题后,Amazon SNS 会发送电子邮件。您可使用电子邮件中的链接确认订阅主题。
您可将访问策略附加到主题以授予 Amazon S3 发布消息的权限。
-
将通知配置添加到存储桶。
第 1 步:创建 Amazon SQS 队列
按照以下步骤创建并订阅 Amazon Simple Queue Service (Amazon SQS) 队列。
-
使用 Amazon SQS 控制台创建队列。有关说明,请参阅 Amazon Simple Queue Service 开发人员指南中的 Amazon SQS 入门。
-
使用以下策略替换附加到队列的访问策略。
-
在 Amazon SQS 控制台的 Queues (队列) 列表中,请选择队列名称。
-
在 Access policy (访问策略) 选项卡上,请选择 Edit (编辑)。
-
替换附加到队列的访问策略。在其中,提供您的 Amazon SQS ARN、源存储桶名称和存储桶拥有者账户 ID。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "
SQS-queue-ARN
", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1
" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id
" } } } ] } -
选择保存。
-
-
(可选)如果 Amazon SQS 队列或 Amazon SNS 主题已通过 Amazon Key Management Service (Amazon KMS) 启用服务器端加密,可将以下策略添加到关联的对称加密客户托管式密钥。
必须将此策略添加到客户托管密钥中,因为您无法为 Amazon SQS 或 Amazon SNS 修改 Amazon 托管密钥。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }
有关将适用于 Amazon SQS 和 Amazon SNS 的 SSE 与 Amazon KMS 结合使用的更多信息,请参阅以下内容:
-
记录队列 ARN。
您创建的 SQS 队列是您的 Amazon Web Services 账户 中另一个资源。它有唯一的 Amazon Resource Name (ARN)。在下一步骤中,您需要用到此 ARN。ARN 的格式如下所示:
arn:aws:sqs:
aws-region
:account-id
:queue-name
第 2 步:创建 Amazon SNS 主题
按照以下步骤创建并订阅 Amazon SNS 主题。
-
使用 Amazon SNS 控制台创建主题。有关说明,请参阅 Amazon Simple Notification Service 开发人员指南中的创建 Amazon SNS 主题。
-
订阅至主题。对于此练习,请使用电子邮件作为通信协议。有关说明,请参阅 Amazon Simple Notification Service 开发人员指南中的订阅 Amazon SNS 主题。
您将收到电子邮件要求您确认订阅该主题。确认订阅。
-
使用以下策略替换附加到主题的访问策略。在其中,提供您的 SNS 主题 ARN、存储桶名称和存储桶拥有者账户 ID。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "Example SNS topic policy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "
SNS-topic-ARN
", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name
" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id
" } } } ] } -
记录主题 ARN。
您创建的 SNS 主题是您的 Amazon Web Services 账户中的另一项资源,它有唯一的 ARN。在下一步骤中,您需要用到此 ARN。ARN 格式如下:
arn:aws:sns:
aws-region
:account-id
:topic-name
步骤 3:将通知配置添加到存储桶
您可以使用 Amazon S3 控制台或以编程方式使用 Amazon 软件开发工具包启用存储桶通知。请选择任何一个选项以配置存储桶通知。此部分提供使用适用于 Java 和 .NET 的 Amazon 软件开发工具包的代码示例。
选项 A:使用控制台在存储桶上启用通知
使用 Amazon S3 控制台,添加请求 Amazon S3 执行以下操作的通知配置:
-
将所有对象创建事件类型的事件发布到 Amazon SQS 队列。
-
将 RRS 中的对象丢失类型的事件发布到 Amazon SNS 主题。
在您保存通知配置后,Amazon S3 会发布测试消息,您将通过电子邮件收到该消息。
有关说明,请参阅 使用 Amazon S3 控制台启用和配置事件通知 启用 Amazon EventBridge。
选项 B:使用 Amazon 软件开发工具包在存储桶上启用通知
步骤 4:测试设置
现在,您可以通过将对象上传到存储桶来测试设置,并在 Amazon SQS 控制台中验证事件通知。有关说明,请参阅 Amazon Simple Queue Service 开发人员指南“入门”部分中的接收消息。