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

上次更新日期:2021 年 11 月 22 日

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

简短描述

如果您从不拥有该订阅的账户调用 Amazon SNS Unsubscribe API,该订阅将进入已删除状态,持续 72 小时。当 Amazon SNS 主题订阅处于已删除状态时,拥有该订阅的账户无法将同一端点重新订阅到该主题。

在 72 小时后,Amazon SNS 将清除已删除的订阅,拥有该订阅的账户可将同一端点重新订阅到该主题。

如果您不想等 72 小时才能重新订阅,可以通过执行以下任一操作来手动重新创建订阅。

注:最佳做法是,您从同一 AWS 账户运行 SubscribeUnsubscribe API 调用。当您调用 Subscribe API 时,您用于进行该调用的 AWS 账户将成为订阅的拥有者。

解决方案

重要提示:以下过程适用于 HTTP 和 HTTPS 端点订阅者。但该过程不适用于 AWS Lambda 函数订阅者

向您收到的 UnsubscribeConfirmation 消息中的 SubscribeURL 发送 HTTP GET 方法请求

1.    在您删除订阅后发送至 Amazon SQS 队列的 UnsubscribeConfirmation 消息中,找到 SubscribeURL。然后,将 URL 复制并粘贴到文本文档中。

2.    向 SubscribeURL 发送 HTTP GET 方法请求

HTTP GET 方法请求示例

curl -X GET "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=<token>"

从拥有该 Amazon SNS 主题的 AWS 账户调用 Amazon SNS Subscribe API,然后确认订阅

1.    从拥有该 Amazon SNS 主题的 AWS 账户调用 Amazon SNS Subscribe API

2.    让有权限的 AWS 用户读取来自 Amazon SQS 确认订阅队列的消息。

创建新的 Amazon SNS 主题以替换当前主题,然后订阅新的主题

1.    创建新的 Amazon SNS 主题以替换当前主题。

2.    将 Amazon SQS 队列订阅到新主题