Lambda同時実行数の調べ方
Lambdaを知りトラブルを減らす
Lambdaの制限を正しく理解する
Lambda同時実行数とは
- AWS Lambda は、同時実行数の制限まで、トラフィックの増加に応じて関数の実行を動的にスケールします。ただし、すべてのシナリオで無期限にスケーリングすることは望ましくありません。たとえば、同時実行数をコスト上の理由や、イベントのバッチの処理にかかる時間や、ダウンストリームリソースに合わせて制御できます。
- そのために、Lambda にはアカウントレベルと機能レベルの両方で同時実行数の制限を制御する機能が用意されています。(出典:AWS Lambda開発者ガイド)
スロットルとは
- 関数に関連付けられた同時実行数の制限に達すると、その関数へのそれ以上の呼び出しリクエストはスロットリングされます。つまり、呼び出しによって関数は実行されません。スロットルされた呼び出しごとに関数の Amazon CloudWatch Throttles メトリクスが増加します。(出典:AWS Lambda開発者ガイド)
Lambdaのメトリクスについて
- Lambdaのスロットリングや同時実行数の使用状況を把握するために、CloudWatchのメトリクスが用意されています。
- 主なLambdaのCloudWatchメトリクス
- Invocations
- イベントまたは API 呼び出しに応じて呼び出される関数の回数を測定します。廃止された RequestCount メトリックが置き換えられます。これは、成功したまたは失敗した呼び出しが含まれますが、調整された試行は含まれません。これは、関数の課金されるリクエストと等しくなります。AWS Lambda は、ゼロ以外の値を持つメトリクスのみを CloudWatch 送信することに注意してください。
- 単位: カウント
- Errors
- 関数 (応答コード 4XX) エラーが原因で失敗した呼び出しの数を測定します。これは、廃止された ErrorCount メトリックが置き換えられます。失敗した呼び出しは、成功する再試行のトリガーとなる場合があります。
- 単位: カウント
- Duration
- 呼び出しの結果として関数コードが実行を開始してから関数の実行が停止されるまでの実時間を測定します。データポイントの最大値は関数のタイムアウト設定で設定可能です。課金期間は、100 ミリ秒を単位として切り上げられます。
- 単位: ミリ秒
- Throttles
- お客様の同時オペレーションを超える呼び出しレートのために調整された Lambda 関数の呼び出し試行の回数を測定します (エラーコード 429)。失敗した呼び出しは、成功する再試行のトリガーとなる場合があります。
- 単位: カウント
- UnreservedConcurrentExecutions
- アカウント内のすべての関数の集約メトリクスとしてのみ送信されます。機能、バージョン、またはエイリアスは該当しません。カスタム同時実行制限が指定されていない関数の同時実行数の合計を表します。ある期間で集計された場合、平均メトリクスとして表示する必要があります。
- 単位: Count
- 出典:AWS Lambda開発者ガイド
- Invocations
Lambdaの同時実行数を見積もる
- ポーリングベースでないイベントソースからのイベントを処理する Lambda 関数を作成する場合(Amazon S3、API Gatewayなど)、これらのイベントソースから行われる呼び出しの数が同時実行数に影響する。
- たとえば、Lambda 関数の実行に平均 3 秒掛かり、Amazon S3 が 1 秒あたり 10 個のイベントを発行するとします。この場合、Lambda 関数の同時実行数は 30 です。(出典:AWS Lambda開発者ガイド)
invocations per second * average execution duration in seconds
Lambdaの同時実行数を調べる
現在の制限を調べる
- Lambda関数の設定値から確認可能です(変更はSupport Caseにて対応)。
CloudWatchメトリクスから同時実行数の調査
- Lambdaのスロットリングが疑われる場合、CloudWatchメトリクスのUnreservedConcurrentExecutionsを確認することで、同時実行数を超えたか否かを知ることができます。