Lambdaのイベントソース処理のリトライ設計値をまとめる(Streams/SQS編)
はじめに
Lambdaのイベントソース処理の設定値と動作は複雑でわかりにくい。
しかも、DynamoDB Streams/Kinesis のストリーム系のイベントソース処理と、SQS イベントソース処理では設定値が異なる。
今回は、上記の非同期系処理を適切にリトライするための設計値をまとめる。
また、Terraformで設定する際のリソースと設定値も付記しておこう。
なお、イベントソース処理は動作上は非同期処理なので、Lambdaの非同期処理と勘違いしがちだが、Lambdaの非同期処理とイベントソース処理はそもそも概念が異なるので注意が必要。具体的なサービスについては、開発者ガイドの以下の節を参照していただきたい。
それぞれの機能の具体的な差異の例として、Lambda実行のリトライ/保持期間/DLQの設定について、非同期呼び出しではLambdaの設定が適用され、イベントソースマッピング呼び出しではイベントソース側の設定が適用される。
ストリーム系非同期処理の設計値
ストリーム系イベントソース処理の設計値は、以下の項目が重要になる。
マネージメントコンソールの設定値 | Terraformリソース | Terraformの設定値 | デフォルト値 |
---|---|---|---|
レコードの最長有効期間 | aws_lambda_event_source_mapping | maximum_record_age_in_seconds | -1(無制限) |
再試行 | aws_lambda_event_source_mapping | maximum_retry_attempts | -1(無制限) |
障害時の送信先 | aws_lambda_event_source_mapping | destination_config - on_failure | 未設定 |
マネージメントコンソールの画面では以下の項目を見ると良い。
障害時の送信先は、下記のように定義する。なお、本設定を行う場合は、Lambda の IAM ロールに sqs:SendMessage
の実行権を付与しておく必要がある。
resource "aws_lambda_event_source_mapping" "test" {
// (中略)
destination_config {
on_failure {
destination_arn = aws_sqs_queue.test.arn
}
}
}
SQSの設計値
SQSによるイベントソース処理の設計値は、以下の項目が重要になる。
マネージメントコンソールの設定値 | Terraformリソース | Terraformの設定値 | デフォルト値 |
---|---|---|---|
タイムアウト | aws_lambda_function | timeout | 3秒 |
デフォルトの可視性タイムアウト | aws_sqs_queue | visibility_timeout_seconds | 30秒 |
メッセージ保持期間 | aws_sqs_queue | message_retention_seconds | 345600(4日) |
最大受信数 | aws_sqs_queue | redrive_policy - maxReceiveCount | 未設定 |
デッドレターキュー | aws_sqs_queue | redrive_policy - deadLetterTargetArn | 未設定 |
マネージメントコンソールの画面で関連する部分は以下。
ここで、気を付けなければいけないのは以下の制限事項だ。
- 可視性タイムアウトの設定値は>Lambdaのタイムアウト値 でないといけない
- メッセージの保持期間>デフォルトの可視性タイムアウト×最大受信数 でないといけない(保持期間を過ぎるとDLQに入らず消滅する)
詳細な動作については以下の記事が分かりやすかった。
【Qiita】SQS → Lambdaのリトライ処理について整理してみた
これで、どちらのパターンでもエラー処理のキューに格納することができるようになった。
あとは、エラー処理のキューを監視するなりの設定を入れておくのが良い。
Author And Source
この問題について(Lambdaのイベントソース処理のリトライ設計値をまとめる(Streams/SQS編)), 我々は、より多くの情報をここで見つけました https://qiita.com/neruneruo/items/367de78995536890d648著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .