みなさん、こんにちは。サニービュー事業部の小寺です。
今日は、Lambdaの同時実行数について、お伝えします。

■Lambdaとは

AWS Lambdaはサーバーのプロビジョニングや管理を行わずにコードを実行してくれる従量課金制のサービスです。
簡単にいうと、AWSに関するなにかしらのイベントによって処理を実行する環境で、イベント時にプログラムが実行できます。

サーバ管理は不要、コードを書いてZIPファイルまたはコンテナイメージとして、LambdaにアップロードするだけでOKです。
さらに、AWS Lambda では自動的にアプリケーションをスケールさせることができます。

また、料金はミリ秒計測となるので、効率の良いプログラミングで料金の最適化を行うこともできます。
コードが実行されるミリ秒ごと、およびコードがトリガーされた回数に対して課金されます。

■Lambdaの同時実行制限とは?

AWS Lambda は、デフォルト設定でLambda関数の実行と保存に使用できるコンピューティングおよびストレージリソース量が制限されています。
Lambda関数の同時実行数は同一アカウントの同一リージョン内につき、1000に制限されています。
制限はリージョンごとに適用されており、ユーザーはAWSに上限緩和申請をすることで制限を引き上げることができます。したがって、必要に応じて、上限の引き上げリクエストをAWS側に申請することができます。
※上限緩和の申請は必ず受理されるとは限らないので、アーキテクチャを分析し、改善の余地がないかを確認することも必要です。

Lambdaの同時実行数の計測は以下のように考えます。

同時実行=(1秒あたりの呼び出し数)x(平均実行時間(秒))

たとえば、Lambda関数が平均10秒かかり、1秒あたり100個のイベントを発行するとLambda関数を1000同時に実行することになり、制限ぎりぎりとなります。
1分に1000リクエストが受信され、1つのリクエストを完了するのに100秒かかる高負荷のようなケースでも1000の同時実行数を超える可能性が高いです。

Lambda関数の同時実行数が上限に達すると、それ以上の呼び出しはスロットリング(サービスが制限されること)され、実行されません。スロットリングされたリクエストの処理方法は、イベントソースのタイプによって異なります。

どうやったら、スロットリングを回避できるのでしょうか。

そもそも、スロットリングエラーは、Lambda 関数から発生していない可能性があります。関数の呼び出し中に API 呼び出しでスロットリングが発生することもあります。
Amazon CloudWatch Logs をチェックして、スロットリングエラーがあるが、Lambda Throttles メトリクスに対応するデータポイントがないかどうかをまず確認してみましょう。

次に、関数の同時実行メトリクスをチェックし、「リトライ処理を組み込む」という方法です。同期処理の場合、スロットリングが発生するとLambda関数は429「TooManyRequestsException」エラーを返します。このエラーが発生した場合、関数の呼び出し元でリトライ処理を実行します。非同期処理の場合は最大6時間の間隔を空けて自動的にリトライします。

■Lambdaの同時実行数を調べるには

(1)Lambda関数の設定値から確認可能です。

Lambdaより「関数」を選び、「設定」タブをクリックします。デフォルト設定の場合、[予約されていないアカウントの同時実行]の上限数が「1,000」であることが確認できます。

(2)Service Quotasからも確認可能です。

「Service Quotas」を開きます。「AWS Lambda」をクリックします。

「Concurrent executions」が「1,000」であることが確認できます。

■上限緩和申請をするには

「Service Quotas」より「AWS Lambda」をクリックし、「Concurrent executions」を選びます。「クォータの引き上げをリクエスト」をクリックします。

「クォータ値を変更:」箇所に希望する値を入力し、「リクエスト」をクリックします。
※最大のクォータ値は数十万まで引き上げができるようです。

■その他のLambdaの制限について

今回は、Lambdaの同時実行数について、お伝えしました。
その他に変更ができない制限もあるので、Lambdaの制限数について、確認をしておきましょう。

■まとめ

いかがでしたでしょうか。Lambdaを使って処理を行う場合の注意点の一つである同時実行数について、お伝えしました。

Lambdaを利用してサーバーレスアプリケーションを構築するには、Lambdaの特徴を理解することも必要ですね。

AWSをご利用いただくには、直接契約するより断然お得。
AWS利用料が5%割引、さらに日本円の請求書による支払いが可能です!