AWS Lambda
開発者ガイド

スケーリング動作について

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

  • ストリームベースのポーリングベースのイベントソース

    • Amazon Kinesis Data Streams

    • Amazon DynamoDB

    Kinesis または DynamoDB ストリームを処理する Lambda 関数。シャードの数は同時実行の単位です。ストリームに 100 個の実行中シャードがある場合は、最大で 100 個の Lambda 関数呼び出しが同時に実行されています。これは、Lambda が各シャードのイベントを順番に処理するためです。

  • ストリームベースではないポーリングベースのイベントソース: Amazon SQS キューを処理する Lambda 関数の場合、AWS Lambda は最大同時実行レベルに達するまでキューでポーリングを自動的にスケールし、各メッセージバッチは単一の同時実行の単位と見なされます。AWS Lambda の自動スケーリングの動作は、キューが空の場合にポーリングコストを低く抑えると同時に、キューが頻繁に使用されているときに高いスループットを達成できるように設計されています。

    処理の流れ。

    • Amazon SQS イベントソースのマッピングが最初に有効になると、または、トラッフィクがない期間の後にメッセージが最初に表示されると、Lambda は、ロングポーリングリクエストを並行して実行する、5 つのクライアントを使用して Amazon SQS キューのポーリングを開始します。

    • Lambda は インフライトメッセージの数をモニタリングして、この数が増加していることを検出すると、ポーリング頻度を 1 分あたり ReceiveMessage リクエスト 20 回、および関数の同時実行数を 1 分あたり呼び出し 60 回に増やします。キューがビジーの間は、次のいずれかが発生するまでスケールアップが続けられます。

      • ポーリング頻度が同時 ReceiveMessage リクエスト 100 回、および関数の同時呼び出しが 1,000 回に達した場合。

      • アカウントの同時実行数の上限に達した場合。

      • (存在する場合) SQS キューにアタッチされている関数の関数あたりの同時実行数の制限に達した場合。

  • AWS Lambda がインフライトメッセージの数が減少していることを検出すると、ポーリング頻度を 1 分あたり ReceiveMessage リクエスト 10 回、および関数呼び出しに使用される同時実行数を 1 分あたり呼び出し 30 回に減らします。

    注記

    アカウントレベルの制限はアカウント内の他の関数の影響を受け、関数ごとの同時実行数は関数に送信されたすべてのイベントに適用されます。詳細については、「同時実行数の管理」を参照してください。

  • ストリームベースでないイベントソース - ストリームベースでないイベントソースからのイベントを処理する Lambda 関数を作成する場合 (たとえば、Lambda が Amazon S3 や API Gateway などの他のソースからのすべてのイベントを処理できる場合)、発行される各イベントが同時実行の単位です (アカウントの上限まで)。したがって、イベントソースが発行するイベント (またはリクエスト) の数が、同時実行数に影響します。以下の数式を使用して、Lambda 関数の同時呼び出し数を見積もることができます。

    events (or requests) per second * function duration

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

リクエスト料金

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

request rate = number of concurrent executions / function duration

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

スケーリング

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

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

すべてのリージョンで使用できる即時同時実行増加については、AWS Lambda の制限 を参照してください。

注記

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

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

関数の同時実行を表示および管理する方法については、「同時実行数の管理」を参照してください。