AWS Lambda
開発者ガイド

AWS Lambda 関数のデッドレターキュー

非同期で呼び出された Lambda 関数は 2 回再試行され、その後イベントは破棄されます。再試行に失敗した理由が不明な場合は、デッドレターキュー (DLQ) を使用して、未処理のイベントを Amazon SQS キューまたは Amazon SNS トピックに移動させ、失敗を分析できます。

AWS Lambda は、処理できないイベントを指定された Amazon SNS トピックまたは Amazon SQS キューに移動します。DLQ を指定しない関数は、再試行の上限に達した後でイベントを破棄します。再試行ポリシーの詳細については、「AWS Lambda 再試行動作」を参照してください。

DLQ は、Lambda 関数の DeadLetterConfig パラメータの TargetArn 値に Amazon リソースネーム (ARN) を指定することで設定します。

{ "Code": { "ZipFile": blob, "S3Bucket": "string", "S3Key": "string", "S3ObjectVersion": "string" }, "Description": "string", "FunctionName": "string", "Handler": "string", "MemorySize": number, "Role": "string", "Runtime": "string", "Timeout": number "Publish": bool, "DeadLetterConfig": { "TargetArn": "string" } }

さらに、未処理のイベントに振り分けたサービスに応じて、Lambda 関数の実行ロールにアクセス許可を追加する必要があります。

DLQ ターゲット ARN に書き込まれるペイロードは、メッセージ本文への変更のない元のイベントペイロードです。メッセージの属性には、イベントが処理されなかった理由を理解するのに役立つ情報が含まれています。

DLQ メッセージ属性

名前 タイプ
RequestID 文字列 一意のリクエスト ID
ErrorCode 数値 3 桁の HTTP エラーコード
ErrorMessage 文字列 エラーメッセージ (1 KB に切り捨て)

DLQ メッセージは、アクセス許可の問題や、メッセージの合計サイズがターゲットキューまたはトピックの制限の超過が原因で、ターゲットに到達できない可能性があります。たとえば、本体が 256 KB に近い Amazon SNS 通知で、エラーが発生する関数がトリガーされた場合、Amazon SNS によって追加された追加のイベントデータ (Lambda によって追加された属性の組み合わせ) によって、メッセージが DLQ で許容されている最大サイズを超過することがあります。DLQ に書き込めない場合、Lambda はイベントを削除し、DeadLetterErrors メトリクスを送信します。

Amazon SQS をイベントソースとして使用する場合、Amazon SQS キューで Lambda 関数ではなく DLQ を設定します。詳細については、「AWS Lambda を Amazon SQS に使用する」を参照してください。