

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# サブスクリプションの Amazon SNS デッドレターキューを設定する
<a name="sns-configure-dead-letter-queue"></a>

デッドレターキューは、Amazon SNS サブスクリプションが受信者に正常に配信できないメッセージの送信先としての Amazon SQS キューです。クライアントエラーまたはサーバーエラーが原因で配信できないメッセージは、詳細な分析や再処理のためにデッドレターキューに保持されます。詳細については、「[Amazon SNS デッドレターキュー](sns-dead-letter-queues.md)」および「[Amazon SNS メッセージ配信の再試行](sns-message-delivery-retries.md)」を参照してください。

このページでは AWS マネジメントコンソール、、 AWS SDK、 AWS CLI、および CloudFormation を使用して、Amazon SNS サブスクリプションのデッドレターキューを設定する方法を示します。

**注記**  
[FIFO トピック](sns-fifo-topics.md)では、Amazon SNS サブスクリプションのデッドレターキューとして Amazon SQS キューを使用できます。FIFO トピックサブスクリプションでは FIFO キューを使用し、標準トピックサブスクリプションでは標準キューを使用します。

## 前提条件
<a name="dead-letter-queue-prerequisites"></a>

デッドレターキューを設定するには、次の前提条件を満たしている必要があります。

1. `MyTopic` という名前で [Amazon SNS トピックを作成する](sns-create-topic.md)。

1. `MyEndpoint` という名前で [Amazon SQS キューを作成し](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html)、Amazon SNS サブスクリプションのエンドポイントとして使用します。

1. (スキップ CloudFormation) [キューをトピックにサブスクライブします](sns-sqs-as-subscriber.md)。

1. `MyDeadLetterQueue` という名前で [Amazon SQS キューを作成し](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html)、Amazon SNS サブスクリプションのデッドレターキューとして使用します。

1. Amazon SQS API アクションへのアクセスを Amazon SNS プリンシパルに付与するには、`MyDeadLetterQueue` に次のキューポリシーを設定します。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "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 マネジメントコンソール
<a name="configure-dead-letter-queue-aws-console"></a>

このチュートリアルを開始する前に、次の[前提条件](#dead-letter-queue-prerequisites)を完了してください。

1. [Amazon SQS コンソール](https://console.aws.amazon.com/sqs/)にサインインします。

1. [Amazon SQS キューを作成する](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html)か、既存のキューを使用して、キューの [**詳細**] タブでキューの ARN を確認します。次に例を示します。

   ```
   arn:aws:sqs:{{us-east-2}}:{{123456789012}}:{{MyDeadLetterQueue}}
   ```

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. ナビゲーションパネルで、[**サブスクリプション**] を選択します。

1. [**サブスクリプション**] ページで、既存のサブスクリプションを選択し、[**編集**] を選択します。

1. [**Edit {{1234a567-bc89-012d-3e45-6fg7h890123i}}**] ページで、[**再処理ポリシー (デッドレターキュー)**] セクションを展開し、次の操作を行います。

   1. [**有効**] を選択します。

   1. Amazon SQS キューの ARN を指定します。

1. [**変更を保存**] をクリックします。

   デッドレターキューを使用するようにサブスクリプションが設定されます。

## AWS SDK を使用して Amazon SNS サブスクリプションのデッドレターキューを設定するには
<a name="configure-dead-letter-queue-aws-sdk"></a>

この例を実行する前に、必ず[の前提条件](#dead-letter-queue-prerequisites)を完了してください。

 AWS SDK を使用するには、認証情報を使用して設定する必要があります。詳細については、「*AWS SDK とツールのリファレンスガイド*」の「[共有設定ファイルと認証情報ファイル](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)」を参照してください。

次の例は、`SetSubscriptionAttributesRedrivePolicy` を使用する方法を説明しています。

------
#### [ Java ]

**SDK for Java 1.x**  
 GitHub には、その他のリソースもあります。用例一覧を検索し、[AWS コード例リポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/java/example_code/sns#code-examples)での設定と実行の方法を確認してください。

```
// 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
<a name="configure-dead-letter-queue-aws-cli"></a>

このチュートリアルを開始する前に、次の[前提条件](#dead-letter-queue-prerequisites)を完了してください。

1.  AWS CLIをインストールして設定します。詳細については、「[https://docs.aws.amazon.com/cli/latest/userguide/](https://docs.aws.amazon.com/cli/latest/userguide/)」を参照してください。

1. 次のコマンドを使用します。

   ```
   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 サブスクリプションのデッドレターキューを設定するには CloudFormation
<a name="configure-dead-letter-queue-aws-cloudformation"></a>

このチュートリアルを開始する前に、次の[前提条件](#dead-letter-queue-prerequisites)を完了してください。

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}}"
           }
         }
       }
     }
   }
   ```

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/) にサインインします。

1. [**テンプレートの選択**] ページで、[**テンプレートを Amazon S3 にアップロード**] を選択した後、`MyDeadLetterQueue.json` ファイルを選択し、次に [**次へ**] を選びます。

1. [**詳細の指定**] ページで、[**スタック名**] に `MyDeadLetterQueue` を入力してから、[**次へ**] を選択します。

1. [**オプション**] ページで、[**次へ**] を選択します。

1. [**Review**] ページで、[**作成**] を選択します。

   CloudFormation は`MyDeadLetterQueue`スタックの作成を開始し、**CREATE\_IN\_PROGRESS** ステータスを表示します。プロセスが完了すると、 は **CREATE\_COMPLETE** ステータス CloudFormation を表示します。