メニュー
AWS Lambda
開発者ガイド

Lambda 関数の同時実行

同時実行数とは、ある時点に関数コードが実行されている件数を指します。同時実行数を見積もることはできますが、Lambda 関数がストリームベースのイベントソースからのイベントを処理しているかによって、同時実行数は異なります。

  • ストリームベースのイベントソース – ストリームベースのサービス (Amazon Kinesis Streams または DynamoDB ストリーム) からのイベントを処理する Lambda 関数を作成する場合、ストリームごとのシャード数が同時実行の単位です。ストリームに 100 個の実行中シャードがある場合は、最大で 100 個の Lambda 関数呼び出しが同時に実行されています。したがって、各 Lambda 関数は各シャードで先着順にイベントを処理します。

  • ストリームベースではないイベントソース – ストリームベースではない (たとえば Amazon S3 または API ゲートウェイ) イベントソースからのイベントを処理する Lambda 関数を作成する場合は、発行されたイベントのそれぞれが作業単位です。したがって、イベントソースが発行するイベント (またはリクエスト) の数が、同時実行数に影響します。

    以下の数式を使用して、Lambda 関数の同時呼び出し数を予想できます。

    Copy
    events (or requests) per second * function duration

    たとえば、Amazon S3 イベントを処理する Lambda 関数について考えてみます。Lambda 関数が平均 3 秒、Amazon S3 が 1 秒あたり 10 個のイベントを発行するとします。したがって、Lambda 関数の同時実行数は 30 です。

リクエスト料金

リクエスト率とは、Lambda 関数が呼び出される率のことです。ストリームベースのサービスを除くすべてのサービスの場合は、リクエスト率はイベントソースがイベントを生成する率です。ストリームベースのサービスの場合は、AWS Lambda は次のようにリクエスト率を計算します。

Copy
request rate = number of concurrent executions / function duration

たとえば、5 つのアクティブなシャードがストリームにあり (つまり、5 つの Lambda 関数が同時に実行されていて)、Lambda 関数に 2 秒かかる場合、リクエスト率は 2.5 リクエスト/秒です。

同時実行数の制限

デフォルトでは、AWS Lambda は特定のリージョン内のすべての関数にわたり、合計の同時実行数を 1000 に制限します。その制限を増やす方法については、以下を参照してください。

関数の同時実行数が安全制限を超えるような場合は、呼び出しがスロットルされます。この場合、呼び出しによって関数は実行されません。呼び出しがスロットルされるごとに、その関数の Amazon CloudWatch Throttles メトリクスが増加します。

スロットルされた呼び出しの処理は、関数の呼び出し方法によって異なります。

  • ストリームベースではないイベントソース – これらのイベントソースの一部は Lambda 関数を同期的に呼び出します。それ以外は非同期呼び出しです。処理はそれぞれ異なります。

    • 同期呼び出し – 同期的に呼び出された関数がスロットルされた場合は、呼び出し元のアプリケーションが 429 エラーを受け取り、再試行の処理が必要になります。これらのイベントソースでは、追加の再試行数が統合に組み込まれている場合もあります。たとえば、CloudWatch Logs では、失敗したバッチが最大 5 回再試行されます (再試行間には遅延があります)。サポートされているイベントソースおよびそれらが使用する呼び出しタイプのリストについては、「サポートされているイベントソース」を参照してください。

      Amazon API Gateway を通じて Lambda を呼び出す場合は、API ゲートウェイ の応答エラーを Lambda のエラーコードに必ずマップします。RequestResponse 呼び出しモードまたは API ゲートウェイ を使用して関数を直接 (AWS SDK 経由などで) 実行した場合、クライアントでは 429 エラーが表示され呼び出しを再試行できます。

    • 非同期呼び出し – 非同期的に呼び出された Lambda 関数がスロットルされた場合は、AWS Lambda はスロットルされたイベントを最大 6 時間自動的に再試行します (再試行間には遅延があります)。非同期イベントは、Lambda 関数の呼び出しに使用される前に、キュー登録されます。

  • ストリームベースのイベントソース – ストリームベースのイベントソース (Amazon Kinesis Streams および Amazon DynamoDB ストリーム) の場合、AWS Lambda はストリームをポーリングして Lambda 関数を呼び出します。Lambda 関数がスロットルされた場合、AWS Lambda はデータの有効期限が切れるまで、レコードのスロットルされたバッチの処理を試みます。この期間は、Amazon Kinesis Streams の場合 7 日間です。スロットルされたリクエストはシャードごとにブロックとして扱われ、スロットルされたレコードのバッチの有効期限が切れるか処理が成功するまで、Lambda ではシャードから新しいレコードの読み込みが行われません。ストリームに複数のシャードがある場合は、スロットルされていないシャードで呼び出しを成功するまで続けます。

同時実行数の制限の引き上げをリクエストするには

  1. AWS Support Center ページを開き、必要に応じてサインインし、[Create case] を選択します。

  2. [Regarding] で、[Service Limit Increase] を選択します。

  3. [Limit Type] で [Lambda] を選択し、フォームにある必須フィールドを入力して、希望する連絡方法のページの下部にあるボタンを選択します。

注記

関数が受信イベントレートに一致できるように、AWS は同時実行数の制限を自動的に引き上げます。たとえば、関数が Amazon S3 バケットからトリガーされた場合に、この操作が実行されます。

スケーリング

AWS Lambda は、アカウントの「同時実行数の制限」に従って、トラフィックの増加に応じて容量を動的にスケールします。任意のトラフィックのバーストを処理するために、Lambda はそれが実行されるリージョンに応じてあらかじめ決められた量で同時実行関数を即時に増やします。

次の表に示すように、デフォルト値の [Immediate Concurrency Increase] がトラフィックの急増に対応するために十分ではない場合、Lambda は関数の同時実行数を 1 分あたり 500 ずつ、アカウントの安全制限に到達するか、関数の同時実行数が増加した負荷を正常に処理するのに十分な数になるまで増やし続けます。

注記

Lambda は Amazon EC2 に依存して VPC 対応の Lambda 関数の Elastic Network Interface を提供するため、これらの関数にもスケーリングの際に Amazon EC2 のレート制限が適用されます。Amazon EC2 のレート制限により、VPC 対応の関数では 1 分間に 500 件を超える同時呼び出しを追加できないため、前のセクションの「同時実行数の制限の引き上げをリクエストするには」の手順に従って制限の引き上げをリクエストしてください。

このレートを超える場合 (同時実行数の引き上げ枠をすぐに使い切るアプリケーションの場合) は、アプリケーションでクライアント側の再試行およびバックオフを通じて Amazon EC2 スロットリング (502 EC2ThrottledException) を処理します。詳細については、「AWS でのエラーの再試行とエクスポネンシャルバックオフ」を参照してください。

以下の表には、リージョンごとの即時同時実行増加の概要が記載されています。

サービス対象 即時同時実行増加 (関数実行)
アジアパシフィック (東京) 1,000
アジアパシフィック (ソウル) 500
アジアパシフィック (ムンバイ) 500
アジアパシフィック (シンガポール) 500
アジアパシフィック (シドニー) 500
カナダ (中部) 500
欧州 (フランクフルト) 1,000
欧州 (ロンドン) 500
欧州 (アイルランド) 3000
米国東部 (オハイオ) 500
米国西部 (北カリフォルニア) 500
米国西部 (オレゴン) 3000
米国東部(バージニア北部) 3000
南米 (サンパウロ) 500

推奨事項

AWS Lambda を初めて使用する場合は、「仕組み」セクションのすべてのトピックに目を通し、Lambda の内容を確認しておくことをお勧めします。次のトピックは「エラー時の再試行」です。

「仕組み」セクションのすべてのトピックに目を通した後は、Lambda 関数のビルドを確認して、ご利用開始にあたっての実習を体験し、ユースケースについて学習することをお勧めします。各ユースケースには、エンドツーエンドエクスペリエンスを体験できるエンドツーエンドの説明が記載されています。