翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNSデッドレターキュー
デッドレターキューは、Amazon SNSサブスクリプションがサブスクライバーに正常に配信できないメッセージをターゲットにできる Amazon SQSキューです。クライアントエラーまたはサーバーエラーが原因で配信できないメッセージは、詳細な分析や再処理のためにデッドレターキューに保持されます。詳細については、「サブスクリプションの Amazon SNSデッドレターキューの設定」および「Amazon SNS メッセージ配信の再試行」を参照してください。
注記
Amazon SNSサブスクリプションと Amazon SQSキューは、同じ AWS アカウントとリージョンにある必要があります。
-
FIFO トピック では、Amazon SQSサブスクリプションのデッドレターキューとして Amazon キューを使用できますSNS。FIFO トピックサブスクリプションはFIFOキューを使用し、標準トピックサブスクリプションは標準キューを使用します。
暗号化された Amazon SQSキューをデッドレターキューとして使用するには、Amazon SNSサービスプリンシパルにアクションへのアクセス AWS KMS APIを許可するキーポリシーKMSを持つカスタムを使用する必要があります。詳細については、このガイドサーバー側の暗号化による Amazon SNSデータの保護の「」および「サーバー側の暗号化を使用した Amazon SQS データの保護 (SSE)」および AWS KMS「Amazon Simple Queue Service デベロッパーガイド」の「」を参照してください。
トピック
メッセージ配信が失敗する理由
通常、クライアント側またはサーバー側のエラー が原因で Amazon SNS がサブスクライブされたエンドポイントにアクセスできない場合、メッセージ配信は失敗します。Amazon がクライアント側のエラーSNSを受信するか、対応する再試行ポリシーで指定された再試行回数を超えるメッセージのサーバー側のエラーを引き続き受信すると、Amazon はメッセージをSNS破棄します。ただし、デッドレターキューがサブスクリプションにアタッチされている場合を除きます。配信に失敗しても、サブスクリプションのステータスは変更されません。詳細については、「Amazon SNS メッセージ配信の再試行」を参照してください。
クライアント側エラー
Amazon に古いサブスクリプションメタデータSNSがある場合、クライアント側のエラーが発生する可能性があります。これらのエラーは、所有者がエンドポイントを削除する場合 (Amazon SNSトピックにサブスクライブされている Lambda 関数など)、または Amazon がエンドポイントにメッセージをSNS配信できないようにサブスクライブされたエンドポイントにアタッチされているポリシーを変更する場合によく発生します。Amazon SNS は、クライアント側のエラーの結果として失敗するメッセージ配信を再試行しません。
サーバー側のエラー
サーバー側のエラーは、サブスクライブされたエンドポイントを担当するシステムが使用できなくなったり、Amazon からの有効なリクエストを処理できないことを示す例外を返したりすると発生する可能性がありますSNS。サーバー側のエラーが発生すると、Amazon SNS は線形バックオフ関数または指数バックオフ関数を使用して失敗した配信を再試行します。Amazon SQSまたは によってバックアップされた AWS マネージドエンドポイントに起因するサーバー側のエラーの場合 AWS Lambda、Amazon SNS は 23 日間で最大 100,015 回配信を再試行します。
カスタマーマネージドエンドポイント (HTTP、、SMS、モバイルプッシュなど) SMTPも、サーバー側のエラーを引き起こす可能性があります。Amazon SNS は、これらのタイプのエンドポイントへの配信も再試行します。HTTP エンドポイントはカスタマー定義の再試行ポリシーをサポートしますが、Amazon は、SMTP、、SMSおよびモバイルプッシュエンドポイントについて、内部配信再試行ポリシーを 6 時間で 50 倍SNSに設定します。
デッドレターキューのしくみ
メッセージ配信はSNSサブスクリプションレベルで行われるため、デッドレターキューは (トピックではなく) Amazon サブスクリプションにアタッチされます。これにより、各メッセージの元のターゲットエンドポイントをより簡単に識別できます。
Amazon SNSサブスクリプションに関連付けられたデッドレターキューは、通常の Amazon SQSキューです。メッセージの保持期間の詳細については、『Amazon Simple Queue Service デベロッパーガイド』の「メッセージに関連するクォータ」を参照してください。Amazon SQSSetQueueAttributes
APIアクションを使用して、メッセージ保持期間を変更できます。アプリケーションの復元性を高めるために、デッドレターキューの最大保持期間を 14 日に設定することをお勧めします。
メッセージがデッドレターキューに移動する仕組み
メッセージは、再処理ポリシーを使用してデッドレターキューに移動されます。リドライブポリシーは、デッドレターキューARNの を参照するJSONオブジェクトです。deadLetterTargetArn
属性は を指定しますARN。は、Amazon SNSサブスクリプションと同じ AWS アカウント および リージョンの Amazon SQSキューを指すARN必要があります。詳細については、「サブスクリプションの Amazon SNSデッドレターキューの設定」を参照してください。
次のJSONオブジェクトは、SNSサブスクリプションにアタッチされたサンプルリドライブポリシーです。
{
"deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
}
メッセージをデッドレターキューから移動する方法
メッセージをデッドレターキューから移動するには、次の 2 つの方法があります。
-
Amazon SQSコンシューマーロジックの書き込みを避ける — デッドレターキューをイベントソースとして Lambda 関数に設定して、デッドレターキューをドレインします。
-
Amazon SQSコンシューマーロジックの書き込み – Amazon SQS API、 AWS SDK、または を使用して、デッドレターキュー内のメッセージをポーリング、処理、削除するためのカスタムコンシューマーロジックを AWS CLI 書き込みます。
デッドレターキューのモニタリングとログ記録方法
Amazon CloudWatch メトリクスを使用して、Amazon SNSサブスクリプションに関連付けられたデッドレターキューをモニタリングできます。すべての Amazon SQSキューは 1 分間隔で CloudWatch メトリクスを出力します。詳細については、「Amazon Simple Queue Service デベロッパーガイド」の「Amazon で利用可能な CloudWatch メトリクスSQS」を参照してください。 デッドレターキューを持つすべての Amazon SNSサブスクリプションも CloudWatch メトリクスを出力します。詳細については、「を使用した Amazon SNSトピックのモニタリング CloudWatch」を参照してください。
デッドレターキュー内のアクティビティを通知するには、 CloudWatch メトリクスとアラームを使用できます。このNumberOfMessagesSent
メトリクスは処理の試行に失敗したDLQために に送信されたメッセージをキャプチャしないため、メトリクスのアラームの設定は適切ではありません。代わりに、 ApproximateNumberOfMessagesVisible
メトリクスを使用します。メトリクスは、処理の失敗によって移動されたメッセージを含めDLQ、 で現在利用可能なすべてのメッセージをキャプチャします。
CloudWatch アラーム設定の例
-
ApproximateNumberOfMessagesVisible
メトリクスのCloudWatchアラームを作成します。 -
アラームしきい値を 1 (または期待値とDLQトラフィックに基づいて別の適切な値) に設定します。
-
アラームが鳴ったときに通知する Amazon SNSトピックを指定します。この Amazon SNSトピックでは、アラーム通知を任意のエンドポイントタイプ (E メールアドレス、電話番号、モバイルページャーアプリなど) に配信できます。
CloudWatch Logs を使用して、Amazon SNS配信が失敗する原因となる例外を調査し、メッセージをデッドレターキューに送信できます。Amazon SNSは、成功した配信と失敗した配信の両方を にログ記録できます CloudWatch。詳細については、「Amazon SNS モバイルアプリの属性」を参照してください。