設定訂閱的 Amazon SNS 無效字母佇列 - Amazon Simple Notification Service

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

設定訂閱的 Amazon SNS 無效字母佇列

無效字母佇列是一種 Amazon SQS 佇列,Amazon SNS 將它作為無法成功傳遞給訂閱者訊息的目標。由於用戶端錯誤或伺服器錯誤而無法傳遞的訊息,會保留在無效字母佇列,以供進一步分析或重新處理。如需詳細資訊,請參閱 Amazon SNS 無效字母佇列Amazon SNS 訊息傳遞重試

此頁面說明如何使用 AWS Management Console、 AWS 開發套件 AWS CLI、 和 AWS CloudFormation 來設定 Amazon SNS 訂閱的無效字母佇列。

注意

對於 FIFO 主題,您可以使用 Amazon SQS 佇列做為 Amazon SNS 訂閱的無效字母佇列。FIFO 主題訂閱使用 FIFO 佇列,而標準主題訂閱則使用標準佇列。

先決條件

設定無效字母佇列之前,請完成以下先決條件:

  1. 建立 Amazon SNS 主題,命名為 MyTopic

  2. 建立 Amazon SQS 佇列,命名為 MyEndpoint,用來做為 Amazon SNS 訂閱的端點。

  3. (Skip for AWS CloudFormation) 訂閱 主題的佇列

  4. 建立另一個 Amazon SQS 佇列,命名為 MyDeadLetterQueue,用作 Amazon SNS 訂閱的無效字母佇列。

  5. 若要授予 Amazon SNS 委託人對 Amazon SQS API 動作的存取權,請設定 MyDeadLetterQueue 的下列佇列政策。

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic" } } }] }

使用 設定 Amazon SNS 訂閱的無效字母佇列 AWS Management Console

開始本教學課程之前,請先完成下列先決條件

  1. 請登入 Amazon SQS 主控台

  2. 建立 Amazon SQS 佇列或使用現有佇列,並記下佇列 Details (詳細資訊) 索引標籤上顯示的佇列 ARN,例如:

    arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
  3. 登入 Amazon SNS 主控台

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

  5. Subscriptions (訂閱) 頁面上,選取現有訂閱,然後選擇 Edit (編輯)。

  6. Edit 1234a567-bc89-012d-3e45-6fg7h890123i(編輯 1234a567-bc89-012d-3e45-6fg7h890123i) 頁面上,展開 Redrive policy (dead-letter queue) (再驅動政策 (無效字母佇列)) 區段,然後執行下列動作:

    1. 選擇 Enable (啟用)。

    2. 指定 Amazon SQS 佇列的 ARN。

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

    您的訂閱已設為使用無效字母佇列。

使用 AWS SDK 設定 Amazon SNS 訂閱的無效字母佇列

執行此範例之前,請確定您已完成先決條件

若要使用 AWS SDK,您必須使用 登入資料進行設定。如需詳細資訊,請參閱 AWS SDK和工具參考指南中的共享的配置和認證文件

下列程式碼範例示範如何使用 SetSubscriptionAttributesRedrivePolicy

Java
適用於 Java 1.x 的 SDK
注意

GitHub 上提供更多範例。尋找完整範例,並了解如何在 AWS 程式碼範例儲存庫中設定和執行。

// Specify the ARN of the Amazon SNS subscription. String subscriptionArn = "arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i"; // Specify the ARN of the Amazon SQS queue to use as a dead-letter queue. String redrivePolicy = "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"; // Set the specified Amazon SQS queue as a dead-letter queue // of the specified Amazon SNS subscription by setting the RedrivePolicy attribute. SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest() .withSubscriptionArn(subscriptionArn) .withAttributeName("RedrivePolicy") .withAttributeValue(redrivePolicy); sns.setSubscriptionAttributes(request);

使用 設定 Amazon SNS 訂閱的無效字母佇列 AWS CLI

開始本教學課程之前,請先完成下列先決條件

  1. 安裝及設定 AWS CLI。如需詳細資訊,請參閱 AWS Command Line Interface 使用者指南

  2. 使用下列 命令。

    aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i --attribute-name RedrivePolicy --attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"

使用 設定 Amazon SNS 訂閱的無效字母佇列 AWS CloudFormation

開始本教學課程之前,請先完成下列先決條件

  1. 將下列 JSON 程式碼複製到名為 MyDeadLetterQueue.json 的檔案。

    { "Resources": { "mySubscription": { "Type" : "AWS::SNS::Subscription", "Properties" : { "Protocol": "sqs", "Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint", "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic", "RedrivePolicy": { "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue" } } } } }
  2. 登入 AWS CloudFormation 主控台

  3. Select Template (選擇範本) 頁面中,選擇 Upload a template to Amazon S3 (上傳範本至 Amazon S3)、選擇您的 MyDeadLetterQueue.json 檔案,再選擇 Next (下一步)。

  4. Specify Details (指定詳細資訊) 頁面上,為 Stack Name (堆疊名稱) 輸入 MyDeadLetterQueue,然後選擇 Next (下一步)。

  5. Options (選項) 頁面上,選擇 Next (下一步)。

  6. Review (檢閱) 頁面上,選擇 Create (建立)。

    AWS CloudFormation 開始建立MyDeadLetterQueue堆疊,並顯示 CREATE_IN_PROGRESS 狀態。程序完成時, AWS CloudFormation 會顯示 CREATE_COMPLETE 狀態。