最大インスタンス数を構成する

Cloud Functions インスタンスの最大数を設定することで、関数のスケーリング動作を制御できます。最大インスタンス数を設定すると、コストが制御され、ダウンストリーム リソースがトラフィックに圧倒されるのを防ぐことができます。

Cloud Functions では、関数の新しいインスタンスを作成してスケーリングを行います。各インスタンスは一度に 1 つのリクエストしか処理できないため、リクエスト量が急増すると多数のインスタンスが作成される可能性があります。

自動スケーリングはほとんどの場合有益ですが、場合によっては、ある時点で存在できるインスタンスの総数を制限する必要があります。たとえば、関数が接続数に制限のあるデータベースを処理する場合です。

Cloud Functions(第 2 世代)では、追加のスケーリング メカニズムとして同時実行が提供されます。同時実行用に構成された関数は、1 つのインスタンスで複数のリクエストを同時に実行できます。同時実行と複数のインスタンスの両方を使用して関数のパフォーマンスを最適化する関数を構成できます。同時実行の構成については、Cloud Functions の同時実行をご覧ください。

最大インスタンス数の上限の設定とクリア

デプロイ時に、関数のインスタンスの最大数を設定できます。関数ごとに独自の最大インスタンスを設定できます。関数は互いに独立してスケールされます。

最大インスタンス数の上限の設定

最大インスタンス数の上限を設定するには、Google Cloud CLI または Google Cloud コンソールを使用します。上限を指定しない場合、Cloud Functions によってデフォルトが設定されます。

  • Cloud Functions(第 1 世代)関数の場合は 3,000
  • Cloud Functions(第 2 世代)関数の場合は 100

最大インスタンス数の上限を設定するには:

コンソール

  1. Cloud Functions の概要ページに移動します。

  2. [関数の作成] をクリックします。

  3. 関数の必須フィールドを入力します。

  4. ページの最後にある [ランタイム、ビルド...] セクションを開き、[ランタイム] タブをクリックします。

  5. [自動スケーリング] セクションの [インスタンスの最大数] フィールドに値を入力するか、デフォルト値を使用します。

gcloud

最大インスタンス数の上限を設定するには、--max-instances フラグを指定して deploy コマンドを実行します。

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

次のように置き換えます。

  • FUNCTION_NAME: 関数名。

  • MAX_INSTANCE_LIMIT: 最大インスタンス数の上限として設定する数値(例: 3000)。

最大インスタンス数の上限のクリア

gcloud コマンドライン ツールまたは Google Cloud コンソールを使用して、Cloud Functions(第 1 世代)関数の最大インスタンス数の上限をクリアできます。Cloud Functions(第 2 世代)の関数では、最大インスタンス数の上限を定義する必要があります。

コンソール

Cloud Functions(第 1 世代)関数の最大インスタンス数の上限をクリアするには:

  1. Cloud Functions の概要ページに移動します。

  2. 既存の関数をクリックして、その詳細ページに移動します。関数の現在の最大インスタンス数の制限は、[詳細] タブで確認できます。

  3. [編集] をクリックします。

  4. ページの最後にある [ランタイム、ビルド...] セクションを開き、[ランタイム] タブをクリックします。

  5. [自動スケーリング] セクションの [インスタンスの最大数] フィールドに「0」と入力します。

gcloud

Cloud Functions(第 1 世代)関数の最大インスタンス数の上限をクリアするには、--clear-max-instances フラグを指定して deploy コマンドを実行します。

gcloud functions deploy FUNCTION_NAME --clear-max-instances

制限とおすすめの方法

このセクションでは、最大インスタンス数を使用するためのガイドラインを説明します。

最大インスタンス値を選択する

最大インスタンス設定に最適な値は、呼び出しの実行にかかる時間、予想される平均呼び出し頻度とピーク呼び出し頻度、呼び出しの失敗に対するアプリケーションの許容度など、関数の特性によって異なります。目安として、最大インスタンス値 3 から始めて、呼び出しの失敗をモニタリングし、必要に応じて最大インスタンス値を調整します。

過剰なスケールアップから保護する

最大インスタンス数の上限が指定されていない場合、Cloud Functions(第 1 世代)では、スループットの制限よりも需要に応じてスケールアップすることが優先されます。つまり、この上限を構成していないと、第 1 世代の関数の同時インスタンス数は無制限になる場合があります。Cloud Functions(第 2 世代)では、最大インスタンス数の上限が設定されていない関数はサポートされません。

スループットの制約のあるサービス、またはスケーラビリティの低いダウンストリーム サービスにリクエストを送信する関数には、--max-instances の上限を割り当てることをおすすめします。最大インスタンス上限は、システム全体の安定性を高め、リクエスト レベルが異常に高くなるのを防止するのに役立ちます。

すべてのインスタンスがビジー状態の場合のリクエストの処理

通常の状況では、関数は、受信トラフィックの負荷を処理するために新しいインスタンスを作成してスケールアップします。ただし、最大インスタンス数の上限を設定した場合、受信トラフィックの負荷を処理できるインスタンス数を確保できないことがあります。

その場合、Cloud Functions は最大 30 秒間、新しい受信リクエストの処理を試みます。

  • インスタンスがこの期間内にリクエストの処理を完了した場合、新しい受信リクエストの処理を開始します。
  • 使用可能なインスタンスがなくなると、リクエストは失敗します。

過負荷な HTTP 関数に送信されたリクエストは、次のレスポンス コードで失敗します。

  • 最大インスタンス値が構成されている場合は 429 Too Many Requests
  • 最大インスタンス値が構成されていない場合は 500 Internal Server Error(第 1 世代関数のみ)

イベント ドリブン関数向けのイベントは、容量が使用可能になるまで自動的に保存されます。

Cloud Functions のスケーリング能力を超える最大インスタンス数の上限

最大インスタンス数を制限するということは、その上限を指定するということです。上限を大きく設定しても、指定した数だけインスタンスがスケールアップされるわけではありません。これは、任意の時点で共存するインスタンス数が上限を超えてはいけないことのみを意味しています。

また、最大インスタンス上限を設定すると、Cloud Functions がトラフィックの需要に対応するためのスケーリング戦略に影響する場合があります。一般に、Cloud Functions はスケールアップして上限を上回る可能性よりも、指定された上限を優先します。

トラフィックの急増への対応

トラフィックが急増した場合など、Cloud Functions が、指定された最大インスタンス数の上限よりも多いインスタンスを一時的に作成する場合があります。関数がこの一時的な動作に対応できない場合は、安全マージンをとり、関数が対応できるインスタンス数よりも少ない最大インスタンス数を設定することをおすすめします。

デプロイメント

関数の新しいバージョンをデプロイすると、Cloud Functions は以前のバージョンから新しいバージョンにトラフィックを移行します。最大インスタンス数の上限は、関数のバージョンごとに設定されるため、デプロイ後、一時的に指定された上限を超えることがあります。

たとえば、関数の最大インスタンス数の上限が 5 に設定されているとします。通常、この関数はリクエストを処理する際に最大で 5 つのインスタンスを使用します。 関数の新しいバージョンをデプロイすると、新しいバージョンのインスタンスの上限は 5 になります。

関数の新しいバージョンがデプロイされるときに、関数の前のバージョンですでに処理中のリクエストの数は考慮されません。これらのリクエストは引き続き処理されます。新しい受信リクエストは、新たにデプロイされた関数のバージョンで処理されます。

したがって、前の例の関数では、新しいバージョンをデプロイした後に、インスタンス数の合計が最大 10 個(関数のバージョンごとに 5 つ)になる場合があります。前の関数のインスタンスが終了するまでの時間は、アクティブなリクエストの処理が完了するまでの時間によって異なります。インスタンス数に適切な上限を選択する際に、この点を考慮する必要があります。

最大インスタンス数の上限のクリア

Cloud Functions(第 1 世代)関数の最大インスタンス数を 0 に設定すると、関数の既存の最大インスタンス数の上限はクリアされますが、関数を一時停止しません。