メニュー
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 に制限します。この上限をデフォルトより大きくするには、「同時実行数の制限の引き上げをリクエストするには」の手順に従ってください。

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

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

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

     

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

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

       

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

       

  • ストリームベースのイベントソース – ストリームベースのイベントソース (Amazon Kinesis Streams および 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 はそれが実行されるリージョンに応じてあらかじめ決められた量で同時実行関数を即時に増やします。

最初のスケールがトラフィックの急増に対応するために十分ではない場合、Lambda は関数の同時実行数を引き続き 1 分あたり 500 ずつ、アカウントの安全制限に到達するか、関数の同時実行数が増加した負荷を正常に処理するのに十分な数まで、増やします。

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

サービス対象 即時同時実行増加 (関数実行)
アジアパシフィック (東京) 3000
米国西部 (北カリフォルニア) 3000
米国東部(バージニア北部) 3000
欧州 (アイルランド) 3000
その他のすべてのリージョン 1,000

推奨事項

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

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