デッドレターキュー
処理に失敗したメッセージを退避させ、後から調査・再処理するためのキュー
非同期耐障害性
デッドレターキュー (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 |
デッドレターキューの背景や設計思想は関連書籍に詳しい。