説明
Lambda の非同期呼び出しが再試行やイベント有効期間の上限に達した後、破棄されるイベントを保管する経路がないと、原因分析や再処理が難しくなります。DLQ は一つの方法であり、別の失敗時送信先や復旧経路があれば、DLQ がないだけでイベント損失とは判断できません。
想定される影響
- 破棄されたイベントが残らないと、処理漏れを復旧しにくくなります。
- 失敗イベントの配信と後続処理を監視しない場合、障害の発見が遅れる可能性があります。
対処方法
非同期処理の復旧要件に合わせて DLQ または失敗時の送信先を構成してください。dead_letter_config には Standard SQS キューまたは Standard SNS トピックの ARN を指定し、実行ロールに配信権限を与えてください。配信エラーを監視し、保管と再処理をテストしてください。
例
非同期処理の失敗に対応する設定の抜粋です。var.lambda_runtime にはデプロイファイルに適合するサポート対象ランタイムを指定してください。実行ロール、SNS トピック、サブスクライバーは別途用意してください。SQS イベントソースの DLQ はキュー自体に設定します。
変更前
hcl
resource "aws_lambda_function" "example" {
function_name = "lambdaWithoutDLQ"
role = aws_iam_role.lambda_exec_role.arn
handler = "index.handler"
runtime = var.lambda_runtime
filename = "lambda.zip"
}
変更後
hcl
resource "aws_lambda_function" "example" {
function_name = "lambdaWithoutDLQ"
role = aws_iam_role.lambda_exec_role.arn
handler = "index.handler"
runtime = var.lambda_runtime
filename = "lambda.zip"
dead_letter_config {
target_arn = "arn:aws:sns:us-east-1:123456789012:my-dlq-topic"
}
}
変更後は同じ関数に SNS DLQ を追加します。SNS は失敗イベントをサブスクライバーへ配信するため、受信と保管の経路を確認してください。権限エラーやサイズ上限で配信が失敗する可能性があり、設定だけで保管が保証されるわけではありません。