デッドレターキュー

処理に失敗したメッセージを退避させ、後から調査・再処理するためのキュー

非同期耐障害性

デッドレターキュー (DLQ) とは

デッドレターキュー (DLQ) は、処理に失敗したメッセージを退避させ、後から調査・再処理するためのキューである。メッセージが失われるのを防ぎ、障害の原因を特定する。

DLQ の仕組み

メッセージ → SQS → Lambda (処理失敗)
                → リトライ 1 回目 (失敗)
                → リトライ 2 回目 (失敗)
                → リトライ 3 回目 (失敗)
                → DLQ に移動
→ DLQ のメッセージを調査・修正・再処理

DLQ vs エラーハンドリング

観点 DLQ try-catch
対象 非同期メッセージ 同期処理
リトライ 自動 (maxReceiveCount) 手動実装
調査 DLQ のメッセージを確認 ログを確認
再処理 DLQ から元のキューに戻す 再リクエスト

DLQ の再処理

# DLQ のメッセージを元のキューに戻す
aws sqs start-message-move-task \
  --source-arn arn:aws:sqs:ap-northeast-1:123456789012:my-dlq \
  --destination-arn arn:aws:sqs:ap-northeast-1:123456789012:my-queue

Lambda の DLQ

イベントソース DLQ の設定場所
SQS トリガー SQS キューの RedrivePolicy
非同期呼び出し Lambda の DeadLetterConfig
EventBridge ルールの DLQ

デッドレターキューの背景や設計思想は関連書籍に詳しい。

関連用語