如何在另一个 AWS 账户中为 Amazon SQS 队列重新创建“已删除”的 Amazon SNS 主题订阅?

上次更新时间:2020 年 3 月 2 日

我在一个 AWS 账户中的 Amazon Simple Queue Service (Amazon SQS) 队列订阅了另一个账户中的 Amazon Simple Notification Service (Amazon SNS) 主题。我删除了跨账户订阅,现在它的状态是“已删除”。如何重新创建该订阅?

简短描述

当您调用 Amazon SNS Subscribe API,您使用的 AWS 账户成了订阅的拥有者。如果您从另一个未拥有订阅的账户调用 Amazon SNS Unsubscribe API 从而删除了订阅,订阅将在 72 个小时内处于“已删除”状态。

在这段时间里,订阅的拥有者账户无法为相同终端节点重新订阅相应的 SNS 主题。但在 72 个小时以后,Amazon SNS 将清除“已删除”的订阅,而您也可以和从前一样重新进行订阅。

注意:最佳实践是,您从同一 AWS 账户运行 SubscribeUnsubscribe API 调用。

解决方法

注意:此解决方法同样适用于 HTTP/S 终端节点订阅者,但是不适用于 AWS Lambda 函数订阅者

如果您不想等 72 个小时,可以通过执行以下任何一种操作来重新创建订阅:

  • 在您删除订阅后发送至 SQS 队列的 UnsubscribeConfirmation 消息中,找到 SubscribeURL。向 SubscribeURL 发送 HTTP GET 请求。例如:
curl -X GET "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb687f5d51e6e241d09c805a5a57b30d712f794cc5f6a988666d92768dd60a747ba6f3beb71854e285d6ad02428b09ceece29417f1f02d609c582afbacc99c583a916b9981dd2728f4ae6fdb82efd087cc3b7849e05798d2d2785c03b0879594eeac82c01f235d0e717736"
  • 从拥有该 SNS 主题的 AWS 账户调用 Subscribe API。然后,让有权限的用户读取来自确认订阅队列的消息。
  • 创建新的 SNS 主题以替换当前主题,接着为 SQS 队列订阅新的主题。