將 Amazon SNS 消息發送到不同帳戶中的 Amazon SQS 隊列 - Amazon Simple Notification Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Amazon SNS 消息發送到不同帳戶中的 Amazon SQS 隊列

本文件說明如何透過另一個帳戶中的 Amazon SQS 佇列訂閱一或多個訂閱向 Amazon SNS 主題發佈通知。如果主題和佇列在相同帳戶中,您要以相同方式設定主題和佇列 (請參閱向 Amazon SQS 隊列散發 Amazon SNS 通知以進行異步處理)。主要差異是您處理訂閱確認的方式,而這取決於您如何將佇列訂閱至主題。

最佳實務是在可能的情況下按照佇列擁有者建立訂閱一節中所述的步驟進行,因為當佇列擁有者建立訂閱時會自動確認。

注意

如果 Amazon SQS 佇列具有大量訊息,建議佇列擁有者建立訂閱。

佇列擁有者建立訂閱

建立 Amazon SQS 佇列的帳戶是佇列擁有者。當佇列擁有者建立訂閱,訂閱並不需要確認。Subscribe 動作一完成,佇列就會開始接收來自主題的通知。若要讓佇列擁有者訂閱主題擁有者的主題,主題擁有者必須提供佇列擁有者許可,以呼叫主題的 Subscribe動作。

步驟 1:使用 AWS Management Console設定主題政策

  1. 登錄到 Amazon 控SNS制台

  2. 在導覽面板上,選擇 Topics (主題)

  3. 選取主題,然後選擇 Edit (編輯)

  4. 在編MyTopic頁面上,展開 [存取原則] 區段。

  5. 輸入下列政策:

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

    此政策授予帳戶 111122223333 呼叫帳戶 123456789012MyTopic 上之 sns:Subscribe 的許可。

    擁有帳戶 111122223333 憑證的使用者可以訂閱 MyTopic。此權限允許帳號 ID 將權限委派給其IAM使用者/角色。唯有根帳戶或管理員使用者可以呼叫 sns:Subscribe。IAM使用者/角色也必須允sns:subscribe許其佇列訂閱。

  6. 選擇 Save changes (儲存變更)。

    具有帳戶認證的使用者111122223333可以訂閱 MyTopic。

步驟 2: AWS 帳戶 使用將 Amazon SQS 佇列訂閱新增至另一個主題中的主題 AWS Management Console

在開始之前,請確定您擁有主題和佇列的,並且已授予主題將訊息傳送至佇列的權限。ARNs

  1. 登錄到 Amazon 控SQS制台

  2. 在導覽面板中選擇 Queues (佇列)。

  3. 從佇列清單中,選擇要訂閱 Amazon SNS 主題的佇

  4. 選擇訂閱 Amazon SNS 主題

  5. 從 [指定此佇列可用的 Amazon SNS 主題] 功能表中,選擇佇列的 Amazon SNS 主題

  6. 選擇輸入 Amazon SNS 主題,ARN然後輸入主題的 Amazon 資源名稱(ARN)

  7. 選擇 Save (儲存)。

    注意
    • 為了能夠與服務通信,隊列必須具有 Amazon 的許可SNS。

    • 如果您是該佇列的擁有者,則無須確認訂閱。

沒有擁有佇列的使用者建立訂閱

建立訂閱但不是佇列擁有者的任何使用者皆須確認訂閱。

當您使用該Subscribe操作時,Amazon SNS 會向隊列發送訂閱確認。訂閱會顯示在 Amazon 主SNS控台中,其訂閱 ID 設定為擱置確認

若要確認訂閱,具有讀取佇列訊息之權限的使用者必須擷取訂閱確認URL,且訂閱擁有者必須使用訂閱確認來確認訂閱URL。直到確認訂閱完成,都不會有發佈至主題的通知傳送至佇列。若要確認訂閱,您可以使用 Amazon SQS 主控台或ReceiveMessage動作。

注意

讓端點訂閱主題之前,請設定佇列的 sqs:SendMessage 許可,以確定佇列可以接收主題的訊息。如需詳細資訊,請參閱第 2 步:授予 Amazon SNS 主題將消息發送到 Amazon SQS 隊列的許可

步驟 1: AWS 帳戶 使用將 Amazon SQS 佇列訂閱新增至另一個主題中的主題 AWS Management Console

在開始之前,請確定您擁有主題和佇列的,並且已授予主題將訊息傳送至佇列的權限。ARNs

  1. 登錄到 Amazon 控SNS制台

  2. 在導覽面板上,選擇 Subscriptions (訂閱)

  3. 訂閱頁面,選擇建立訂閱

  4. 建立訂閱頁面上,於詳細資訊區段中,執行以下作業:

    1. 在「主題」中ARN,輸入主題ARN的。

    2. 對於協議,選擇 Amazon SQS

    3. 對於「端點」,輸入佇列ARN的。

    4. 選擇 Create subscription (建立訂閱)。

      注意
      • 為了能夠與服務通信,隊列必須具有 Amazon 的許可SNS。

以下是允許 Amazon SNS 主題向 Amazon SQS 佇列傳送訊息的範例政策陳述式。

{ "Sid": "Stmt1234", "Effect": "Allow", "Principal": "*", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:111111111111:QueueName", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-west-2:555555555555:TopicName" } } }

步驟 2:若要使用 AWS Management Console

  1. 登錄到 Amazon 控SQS制台

  2. 選取具有待訂閱主題的佇列。

  3. 選擇 Send and receive messages (傳送和接收訊息),然後選擇 Poll for messages (訊息輪詢)。

    有訂閱確認的訊息會在佇列中收到。

  4. Body (本文) 欄位中,執行下列操作:

    1. 選擇 More Details (更多詳細資訊)

    2. 在 [訊息詳細資料] 對話方塊中,尋找並記下 [訂閱] URL 值。這是您的訂閱連結 (如下方範例)。有關API令牌驗證的其他詳細資訊,請參閱 Amazon SNS API 參考ConfirmSubscription中的。

      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
    3. 記下訂閱確認連結。URL必須從佇列擁有者傳遞給訂閱擁有者。訂閱所有者必須URL進入 Amazon SNS 控制台

  5. 訂閱擁有者身分登入 Amazon 主SNS控台訂閱擁有者會執行確認。

  6. 選擇相關主題

  7. 選擇主題訂閱清單表格中相關的訂閱。標記為「Pending confirmation (待確認)」。

  8. 選擇確認訂閱 (Confirm subscription)

  9. 出現一個模式,提示訂閱確認連結。貼上訂閱確認連結。

  10. 選取模式中的 Confirm subscription (確認訂閱)

    此時會顯示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>

    訂閱的佇列已準備好接收來自主題的訊息。

  11. (選擇性) 如果您在 Amazon 主SNS控台中檢視主題訂閱,您可以看到訂閱 ID 欄ARN中的訂閱已取代擱置確認訊息。

如何強制訂閱以要求對取消訂閱請求進行身分驗證?

訂閱擁有者必須在訂閱確認時將AuthenticateOnUnsubscribe 標記設定為 true。

  • 當佇列擁有者建立訂閱時,AuthenticateOnUnsubscribe 將自動設定為 True。

  • 當瀏覽至訂閱確認連結而不進行身分驗證時,無法將 AuthenticateOnUnsubscribe 設定為 True。