最大インスタンス数を構成する
Cloud Run 関数の最大インスタンス数を設定することで、関数のスケーリング動作を制御できます。最大インスタンス数を設定すると、コストが制御され、ダウンストリーム リソースがトラフィックで過負荷になるのを防ぐことができます。
Cloud Run 関数では、関数の新しいインスタンスを作成してスケーリングを行います。各インスタンスは一度に 1 つのリクエストしか処理できないため、リクエスト量が急増すると多数のインスタンスが作成される可能性があります。
自動スケーリングはほとんどの場合有益ですが、場合によっては、ある時点で存在できるインスタンスの総数を制限する必要があります。たとえば、関数が接続数に制限のあるデータベースを処理する場合です。
Cloud Run 関数は、追加のスケーリング メカニズムとして同時実行を提供します。同時実行が構成された関数は、1 つのインスタンスで複数のリクエストを同時に実行できます。同時実行と複数のインスタンスの両方を使用してパフォーマンスを最適化するように関数を構成できます。同時実行の構成については、Cloud Run 関数の同時実行をご覧ください。
最大インスタンス上限の設定
デプロイ時に、関数のインスタンスの最大数を設定できます。関数ごとに独自の最大インスタンスを設定できます。関数は互いに独立してスケーリングされます。Cloud Run 関数では、最大インスタンス数の上限を定義する必要があります。
最大インスタンス上限の設定
最大インスタンス数の上限を設定するには、Google Cloud CLI または Google Cloud コンソールを使用します。上限を指定しない場合、Cloud Run 関数はデフォルトで 100 に設定します。
最大インスタンス数の上限を設定するには:
コンソール
Cloud Run 関数の概要ページに移動します。
[関数を作成] をクリックします。
関数の必須フィールドを入力します。
ページの最後にある [ランタイム、ビルド...] セクションを開き、[ランタイム] タブをクリックします。
[自動スケーリング] セクションの [インスタンスの最大数] フィールドに値を入力するか、デフォルトを使用します。
gcloud
最大インスタンス数の上限を設定するには、--max-instances
フラグを指定して deploy
コマンドを実行します。
gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT
次のように置き換えます。
FUNCTION_NAME: 関数名。
MAX_INSTANCE_LIMIT: 最大インスタンス数の上限として設定する数値(例: 3,000)。
制限とおすすめの方法
このセクションでは、最大インスタンス数を使用するためのガイドラインを説明します。
最大インスタンス値の選択
最大インスタンス設定に最適な値は、呼び出しの実行にかかる時間、予想される平均呼び出し頻度とピーク呼び出し頻度、呼び出しの失敗に対するアプリケーションの許容度など、関数の特性によって異なります。目安として、インスタンスの最大数を 3 から始めて、呼び出しの失敗をモニタリングし、必要に応じて最大インスタンス数を引き上げます。
すべてのインスタンスがビジー状態の場合のリクエストの処理
通常の状況では、関数は、受信トラフィックの負荷を処理するために新しいインスタンスを作成してスケールアップします。ただし、最大インスタンス数の上限を設定した場合、受信トラフィックの負荷を処理できるインスタンス数を確保できないことがあります。
その場合、Cloud Run 関数は最大 30 秒間、新しいインバウンド リクエストの処理を試みます。
- インスタンスがこの期間内にリクエストの処理を完了した場合、新しいインバウンド リクエストの処理を開始します。
- 使用可能なインスタンスがなくなると、リクエストは失敗します。
過負荷状態の HTTP 関数に送信されたリクエストは、レスポンス コード 429 Too Many Requests
で失敗します。
イベント ドリブン関数のイベントは、容量が使用可能になるまで自動的に保存されます。
Cloud Run 関数のスケーリング能力を超える最大インスタンス数の上限
最大インスタンス数を制限するということは、その上限を指定するということです。上限を大きく設定しても、指定した数だけインスタンスがスケールアップされるわけではありません。これは、任意の時点で共存するインスタンス数が上限を超えてはいけないことのみを意味しています。
また、最大インスタンス上限を設定すると、Cloud Run 関数がトラフィックの需要に対応するためのスケーリング戦略に影響する場合があります。一般に、Cloud Run 関数はスケールアップよりも指定された上限を優先しますが、この上限を上回る可能性はあります。
トラフィックの急増への対応
トラフィックが急増した場合など、Cloud Run 関数が、指定された最大インスタンス数の上限よりも多いインスタンスを一時的に作成する場合があります。関数がこの一時的な動作に対応できない場合は、安全マージンをとり、関数が許容できるインスタンス数よりも少ない最大インスタンス数を設定することをおすすめします。
デプロイ
関数の新しいバージョンをデプロイすると、Cloud Run 関数は前のバージョンから新しいバージョンにトラフィックを移行します。最大インスタンス数の上限は、関数のバージョンごとに設定されるため、デプロイ後、一時的に指定された上限を超えることがあります。
たとえば、関数の最大インスタンス数の上限が 5 に設定されているとします。通常、この関数はリクエストを処理する際に最大で 5 つのインスタンスを使用します。 関数の新しいバージョンをデプロイすると、新しいバージョンの最大インスタンス数の上限は 5 になります。
関数の新しいバージョンがデプロイされるときに、関数の前のバージョンですでに処理中のリクエストの数は考慮されません。これらのリクエストは引き続き処理されます。新しい受信リクエストは、新たにデプロイされた関数のバージョンで処理されます。
したがって、前の例の関数では、新しいバージョンをデプロイした後に、インスタンス数の合計が最大 10 個(関数のバージョンごとに 5 つ)になる場合があります。前の関数のインスタンスが終了するまでの時間は、アクティブなリクエストの処理が完了するまでの時間によって異なります。インスタンス数に適切な上限を選択する際に、この点を考慮する必要があります。