向不同账户中的 Amazon SQS 队列发送 Amazon SNS 消息 - Amazon Simple Notification Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

向不同账户中的 Amazon SQS 队列发送 Amazon SNS 消息

通过另一账户中的一项或多项 Amazon SQS 队列订阅,您可以向 Amazon SNS 主题发布通知。如果主题和队列在同一账户下,那么您可以采用相同方法设置主题和队列(参阅 扇出到 Amazon SQS 队列)。主要区别在于您处理订阅确认的方式,这取决于您如何为队列订阅主题。

队列拥有者创建订阅

创建 Amazon SQS 队列的账户是队列拥有者。如果订阅由队列所有者创建,那么此订阅无需确认。一旦 Subscribe 操作完成后,队列即开始接收来自主题的通知。主题所有者必须提供队列所有者的账户权限,允许其对主题调用 Subscribe 操作,从而让队列所有者订阅主题所有者的主题。

第1步: 使用设置主题策略 AWS 管理控制台

  1. 登录到 Amazon SNS 控制台

  2. 在导航面板上,选择主题

  3. 选择一个主题,然后选择 Edit (编辑)

  4. 编辑 MyTopic 页面,展开 准入政策 第节。

  5. 输入以下策略:

    { "Statement":[{ "Effect":"Allow", "Principal":{ "AWS":"111122223333" }, "Action":"sns:Subscribe", "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic" }] }

    此策略授予账户 111122223333 对账户 123456789012 中的 MyTopic 调用 sns:Subscribe 的权限。

  6. 选择保存更改

    具有帐户凭证的用户 111122223333 可以订阅 MyTopic.

第2步: 要添加 Amazon SQS 队列订阅另一个主题 AWS 账户,使用 AWS 管理控制台

开始之前,请确保 ARNs 和队列,并且 授予主题将消息发送到队列的权限.

  1. 在导航面板中,选择订阅

  2. Subscriptions (订阅) 页上,选择 Create subscription (创建订阅)

  3. 创建订阅页上,在详细信息部分中,执行以下操作:

    1. 对于 Topic ARN (主题 ARN),输入主题的 ARN。

    2. 对于 Protocol,选择 Amazon SQS

    3. 对于 Endpoint (终端节点),输入队列的 ARN。

    4. 选择 Create subscription

      注意
      • 要能够与服务通信,队列必须具有 Amazon SNS 的权限。

      • 由于您是队列的所有者,因此您无需确认订阅。

非队列所有者用户创建订阅

创建订阅但不是队列所有者的任何用户都必须确认订阅。

使用 Subscribe 操作时,Amazon SNS 向队列发送订阅确认。订阅将显示在 Amazon SNS 控制台中,其订阅 ID 设置为等待确认

要确认订阅,具有从队列读取消息权限的用户必须访问订阅 URL。确认订阅前,向主题发布的通知不会发送至队列。要确认订阅,您可以使用 Amazon SQS 控制台或 ReceiveMessage 操作。

注意

在为终端节点订阅主题之前,请通过为队列设置 sqs:SendMessage 权限来确保队列可以接收来自主题的消息。有关更多信息,请参阅步骤 2: 为向 Amazon SNS 队列发送消息的 Amazon SQS 主题授予权限

使用 AWS 管理控制台确认订阅

  1. 登录到 Amazon SQS 控制台

  2. 选择主题处于等待订阅阶段的队列。

  3. 依次选择 Queue Action (队列操作)View/Delete Messages (查看/删除消息)Start Polling for Messages (开始轮询消息)

    队列中会收到一条带有订阅确认的消息。

  4. Body (正文) 列中,执行以下操作:

    1. 选择更多详情

    2. 消息详细信息 对话框,查找并记下 SubscribeURL 值,例如:

      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
  5. 在 Web 浏览器中,导航到此 URL。

    将显示 XML 响应,例如:

    <ConfirmSubscriptionResponse> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-bc89-012d-3e45-6fg7h890123i</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId> </ResponseMetadata> </ConfirmSubscriptionResponse>

    已订阅队列已准备好接收来自主题的消息。

  6. (可选)如果您在 Amazon SNS 控制台中查看主题订阅,则可以看到等待确认消息已被订阅 ID 列中的订阅 ARN 取代。