最大インスタンス数を構成する(第 1 世代)

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

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

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

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

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

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

最大インスタンス数の上限を設定するには、Google Cloud CLI または Google Cloud コンソールを使用します。上限を指定しない場合、Cloud Run functions はデフォルトで 3,000 に設定します。

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

コンソール

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

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

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

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

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

gcloud

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

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

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

  • FUNCTION_NAME: 関数名。

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

最大インスタンス制限のクリア

関数の最大インスタンス数の上限をクリアするには、gcloud コマンドライン ツールまたは Google Cloud コンソールを使用します。

コンソール

関数の最大インスタンス数の上限をクリアするには:

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

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

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

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

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

gcloud

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

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-max-instances

制限とベスト プラクティス

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

最大インスタンス値の選択

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

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

最大インスタンス数の上限が指定されていない場合、Cloud Run functions では、スループットの制限よりも需要に応じてスケールアップすることが優先されます。つまり、この上限を構成していないと、関数の同時インスタンス数は無制限になる場合があります。

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

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

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

その場合、Cloud Run functions は最大 30 秒間、新しいインバウンド リクエストの処理を試みます。

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

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

  • 最大インスタンス値が構成されている場合は 429 Too Many Requests
  • 最大インスタンス値が構成されていない場合は 500 Internal Server Error

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

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

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

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

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

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

デプロイ

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

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

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

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

最大インスタンス制限のクリア

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