Mobingi Advent Calendar 2018 8日目の記事です。
みなさんこんにちは、丸山です。
今年の AWS re:Invent 2018 でも、多くのアップデートと話題をさらったのが記憶に新しい AWS Lambda 。
そんな AWS Lambda について、改めて気をつけるべきポイントをまとめてみました。
冪等性を確保する
AWS Lambda(以降Lambda)が保証するのは「最低一回実行する」ことであり、「1回しか実行しない」ことは保証していません。Lambdaファンクションが何回実行されても問題が起こらないように実装する必要があります。
イベントソースごとのリトライ動作の違いを理解する
ストリームベースではないイベントソースの非同期呼び出しに分類される S3 では、最大3回まで実行されますが、ストリームベースのポーリングベース (またはプルモデル) のイベントソースに分類される Kinesis Data Streams、 DynamoDB では、データの有効期限が切れるまで(最大7日間)再実行されます。これらの点を考慮しながら、要件を満たす実装が必要があります。
私の思い出話で恐縮ですが、Kinesis Data Streams をイベントソースにしていたLambdaファンクションで、リアルにデータの有効期限の3日間、延々とリトライし続けていたことを示すログを見たときはゾッとしました。
以下の公式ドキュメントを穴が空くほど読むことをお勧めします。
AWS Lambda 再試行動作 – AWS Lambda
Node.js の AWS Lambda 関数ハンドラ – AWS Lambda
失敗を検知できるようにしておく
Lambda を本番で運用する前に、エラーがすぐに検知できるように通知設定を行うことを忘れないでください。
Lambdaは CloudWatch から簡単に通知設定が行えますよ。
コンテナの再利用は期待しない
Lambdaファンクションが実行されるコンテナは、再利用される場面があり、その場合、/tmp ディレクトリの中身は残ります。
ですが、コンテナの再利用を考慮した実装は避けるのが健全です。
コンテナの再利用のライフサイクルについては公式で公開されていないので、知らない間に変更が加わる可能性があります。
最後に
AWS Lambdaを触り始めた頃は、上記の項目(特に冪等性の部分)を全く考慮せずに大火傷を負った経験があります。みなさんも上記に気をつけて、楽しい Lambda ライフをお送りください。