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

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

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

选择加入区域

使用 Amazon SNS 将消息从选择加入区域传送到默认启用的区域时,必须更改为队列创建的资源策略。将委托人 sns.amazonaws.com 替换为 sns.<opt-in-region>.amazonaws.com

例如,如果要为美国东部(弗吉尼亚北部)的队列订阅亚太地区(香港)的 SNS 主题,请将队列策略中的委托人更改为 sns.ap-east-1.amazonaws.com。选择加入的区域包括 2019 年 3 月 20 日之后推出的任何区域,包括亚太地区(香港)、中东(巴林)、欧盟(米兰)和非洲(开普敦)。2019 年 3 月 20 日之前推出的区域默认情况下处于启用状态。

注意

我们还支持从默认启用的区域到选择加入区域的跨区域交付到 Amazon SQS。但是,不支持将 SNS 消息从选择加入区域到其他选择加入区域的跨区域转发。

队列拥有者创建订阅

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

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

  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 对账户 123456789012 中的 MyTopic 调用 sns:Subscribe 的权限。

  6. 选择保存更改

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

步骤 2:使用 AWS 管理控制台将 Amazon SQS 队列订阅添加到另一个 AWS 账户中的主题

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

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

  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 控制台或 ReceiveMessage 操作。

注意

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

使用 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 取代。