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

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

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

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

队列拥有者创建订阅

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

第 1 步:使用设置主题策略Amazon Web Services Management Console

  1. 登录到Amazon SNS 控制台

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

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

  4. Edit MyTopic (编辑 MyTopic) 页上,展开 Access policy (访问策略) 部分。

  5. 输入以下策略:

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

    此策略给出帐户111122223333调用权限sns:Subscribe上的MyTopic在账户中.

  6. 选择保存更改

    拥有账户 111122223333 的凭证的用户可以订阅 MyTopic。

第 2 步:将 Amazon SQS 队列订阅添加到另一个主题 Amazon Web Services 账户 使用Amazon Web Services Management Console

在开始之前,请确保您具有主题和队列的 ARN,并且已授予该主题将消息发送到队列的权限

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

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

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

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

    2. 适用于协议中,选择Amazon SQS

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

    4. 选择 Create subscription

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

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

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

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

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

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

注意

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

使用 Amazon Web Services Management Console确认订阅

  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 控制台中查看主题订阅,则可以看到等待确认消息已替换为订阅 IDcolumn.