Skip to content

orinbou/lambda-idempotency

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

lambda-idempotency

AWS Lambda sample code for implementing idempotency.

説明

残念ながらAWS Lambdaでは発火イベントが意図せず複数回発生してしまうことがあります。

【AWS Black Belt Online Seminar】Serverless モニタリング 【P.48】から抜粋

alt text

その結果、処理中/処理済データを処理しようとして次のような問題が発生してしまいます。

  • 処理対象データが巨大な場合、ハイスペックで高単価なLambdaが無駄に複数回実行されコストが嵩む
  • 処理中データを複数処理で取り合いデータの破損やデッドロックや待ちが発生する
  • 後発処理がエラーとなり処理の実行メトリクスが悪化する
  • 後発処理がエラーとなり無駄にアラートの発報が発生する
  • 絶対に失敗する後発処理エラーに対して無駄なLambdaのリトライが発生する(初期設定では2回)

以上の問題を防ぐAWS Lambdaの実行の冪等性(べきとうせい)を実現するサンプルを実装しました。

以下のバージョンを利用しました。

  • python_version : 3.8.18
  • boto3.version : 1.26.90

冪等性を実現するためのデータストアはDynamoDBでテーブル定義は以下のとおりです。

alt text

テストデータ

テスト実行に用いたイベントデータは次のとおりです。

{
  "JobId": "12345",
  "ObjKey": "sun-ada-bucket-tokyo/smallfile"
}

正常終了

DynamoDBテーブルに以下のように記録されます。

alt text

異常終了

DynamoDBテーブルに以下のように記録されます。

alt text

多重起動

ログに以下のように出力して直ちに処理を終了します。

Function Logs

START RequestId: 50d363b4-b6ab-48d2-843d-aab3a0043aec Version: $LATEST
:
[WARNING]	2024-03-10T02:36:47.423Z	50d363b4-b6ab-48d2-843d-aab3a0043aec	lambdaが多重起動したため処理を終了しました。
:
END RequestId: 50d363b4-b6ab-48d2-843d-aab3a0043aec

参考

About

AWS Lambda sample code for implementing idempotency.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages