AWS Lambdaを使うときに気を付けることのメモ。(2023/8)
AWS Lambdaとは?!
Amazon Web ServiceのLambdaは、Amazonのドキュメントによると、
参考:AWS Lambda とは?(https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)
AWS Lambdaを使用するとサーバ側のコードをサーバレスで実行できる。また、AWSの各ソリューションとの連携もできる。
一方で、AWS Lambdaは実行時間や同時実行数に制限があるので、ベストプラクティスを参考に設計したほうがよさそう。
参考:AWS Lambda 関数を使用するためのベストプラクティス(https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html)
Lambdaの実行環境は再利用される
Lambdaは関数の同時呼び出し数に応じて実行するインスタンスを自動で増やしてくれます。
インスタンスは再利用されますので、Lambda関数で一時ファイル(/temp)を使用している場合は、それが残るので注意が必要。
Lambda関数をプロビジョニングしないといけないほど、呼び出して動作が異常になったことがあった。
原因は特定できなかったが、ハンドラー外で定義した変数の値が、前に関数呼び出しして処理したときの値が残っていると、事象が発生することがわかった。
前に実行した値が残っていたかは不明だが、対策後は発生していないのでので、一応注意したほうがよさそう。
Lambdaのスケーリング(実行環境を増やす)速度は上限がある
Lambdaは関数の同時呼び出し数に応じて実行するインスタンスを自動で増やしてくれます。
スケーリングの速度は上限がありますので、Lambda関数を一度に多く実行する場合は、Lmabda関数の呼び出しに失敗することがあるので対策が必要。
下記参考のURLには「関数に追加のスケーリングが必要な場合、Lambda はリージョンに関係なく、1 分あたり最大 500 個の実行環境インスタンス (バーストクォータユニット) を追加してスケールアップできます」との記載があります。
参考:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/burst-concurrency.html
1分間に同時実行数が500を超える場合は、Application Auto Scalingを使用して同時実行環境のプロビジョニングをしたほうがよさそうです。
参考:https://aws.amazon.com/jp/blogs/compute/scheduling-aws-lambda-provisioned-concurrency-for-recurring-peak-usage/
バースト同時実行の制限は東京リージョンは1,000ですので、それ以上の同時実行する場合は、Application Auto Scalingなどでプロビジョニングする必要があるようです。
これで、AWS Lambdaを使うときに気を付けること、は終了。