のべラボ.blog

Tech Blog | AWS や サーバーレスやコンテナ などなど

AWS Lambda の同時実行数に関連する設定の整理

今回は、AWS Lambda の同時実行数に関連する各設定の整理をしていきます。


まず、AWS Lambda には サービスの制限値として、その AWS アカウントで同時に実行環境を作成できる数がリージョン毎に決められています。

これは、AWS Service Quotas で Concurrent executions の値で 確認することができます。

下図は東京リージョンで表示したもので 1,000となっています。ただし、[ 調整可能 ] 列の値が [ はい ] になっているので、緩和申請を行うことができます。

この 値は AWS Lambda 関数の同時実行の設定のページから、[予約されていないアカウントの同時実行] としても参照できます。

これはリージョン単位の値なので、例えば 東京リージョンに AWS Lambda 関数が A, B, C と 3つ作成した場合、その A, B, C の合計の同時実行数が 1,000 までということになります。


次に、特定の AWS Lambda 関数に対しての設定項目についてみていきます。

設定項目 デフォルト値 概要
同時実行の予約数 設定なし そのLambda関数の実行環境の作成を最大同時にいくつまで許可するか

もし AWS Lambda 関数 A に [同時実行の予約数] を 200 に設定すると、AWS Lambda関数 Aの実行環境が同時に作成される数は最大 200までとなります。

つまり、最大同時 200の実行が可能になります。これは逆にいうと、200までは予約・確保されているともいえます。

もし0に設定すると、Lambda関数 Aの実行環境が作成が全くできない、いわゆる ロットリング状態になり AWS Lambda関数 A は実行できない状態になります。


次に、特定の Lambda関数 の特定のエリアスまたは特定のバージョンに設定する項目についてみていきます。

設定項目 デフォルト値 概要
プロビジョニングされた同時実行数 設定なし そのLambda関数の実行環境を事前に作成しておく数

[プロビジョニングされた同時実行数] により、いわゆるコールドスタートと呼ばれる実行環境作成のオーバーヘッドを低減できるメリットが期待できますが、この設定を行うと別途課金が発生することを留意しておきましょう。


これまでみてきた設定項目に値を設定する上では、実はもう 1つ、知っておくべきルールがあります。

それは、[同時実行の予約数] や [プロビジョニングされた同時実行] を設定した結果、[予約されていないアカウントの同時実行]の残容量が 100 未満になってはいけない、というルールです。

[同時実行の予約数] や [プロビジョニングされた同時実行設定] は、1,000という容量に対して、特定の Lambda関数の容量を確保してしまう設定になります。ただし、その結果、残容量が 100未満になることは許されない、ということになります。

次の図は、[同時実行の予約数] での例を表したものですが、[プロビジョニングされた同時実行設定] でも同じです。

実際に AWS マネジメントコンソールで、残容量が 100未満になるような値を設定した時にも、設定不可としてエラーになります。

[同時実行の予約数] で で 910 を設定した場合の例

[プロビジョニングされた同時実行設定] で 910 を設定した場合の例


つまり、最大同時に 1,000の実行が可能であるからといって、特定の AWS Lambda 関数だけでその1,000という容量を全て予約・確保することはできません。 この [予約されていないアカウントの同時実行]の残容量が 100 未満になってはいけない、という制約はついつい見落としがちではないかと思うので、リマインドしておきたいと思います!

/* -----codeの行番号----- */