同時実行

Cloud Functions(第 2 世代)では、1 つの関数インスタンスで複数の同時リクエストを処理できます。これは、すでにウォーム状態のインスタンスが複数のリクエストを同時に処理できるため、コールド スタートの発生を防ぎ、全体的なレイテンシを短縮するのに役立ちます。

同時実行が有効になっている場合、Cloud Functions(第 2 世代)では、同じ関数インスタンスで処理される同時リクエストを分離することはできません。そのような場合は、関数コードを同時に安全に実行できるようにする必要があります。特定の言語のランタイムについては、次の点に注意してください。

  • Node.js は本質的にシングルスレッドです。同時実行を利用するには、Node.js では慣用的な JavaScript の非同期コードスタイルを使用します。詳しくは、Node.js の公式ドキュメントで非同期フロー制御についてご覧ください。

  • 少ない数(8 など)から同時実行を始めて、その数を増やしていくことをおすすめします。同時実行数が多すぎると、リソースの制約(メモリや CPU など)のために意図しない動作につながる可能性があります。

デフォルトでは、関数インスタンスは一度に 1 つのリクエストのみを処理します。次のセクションに示すように、同時実行の値を設定することで、この動作を関数ごとに変更できます。

同時実行の値を設定する

デフォルトの同時実行の値は 1 です。関数の同時実行の値を設定して、デフォルト値をオーバーライドできます。同時実行の値は、関数の 1 つのインスタンスが処理できる同時リクエストの最大数を表します。

同時実行の値が 1 より大きい場合は、関数コードが 1 つのインスタンスで同時に実行されます。同時実行の最大数は 1,000 です(小さい値から始めて増やしていくことをおすすめします)。同時実行の値を 1 より大きい値に設定するには、1 つ以上の vCPU を使用する関数が必要です。デフォルトのメモリと vCPU の値については、メモリの上限をご覧ください。

関数の同時実行は、次のいずれかの方法で設定できます。

  • Cloud Functions: gcloud CLI または Google Cloud コンソール。
  • Cloud Run: gcloud CLI または Google Cloud コンソール。

Cloud Functions を使用して同時実行を設定する

gcloud

同時実行値は、gcloud CLI を使用し、--concurrency フラグを指定して第 2 世代関数をデプロイすることで設定できます。

gcloud functions deploy YOUR_FUNCTION_NAME \
--gen2 \
--concurrency=CONCURRENCY_VALUE \
FLAGS...

ここで、CONCURRENCY_VALUE はコンテナ インスタンスごとに許可される同時リクエストの最大数です。サーバーのデフォルト値を受け取るには、同時実行を未指定のままにします。

コンソール

Google Cloud コンソールを使用して同時実行の値を設定するには:

  1. Google Cloud コンソールで Cloud Functions の概要ページに移動します。
  2. 関数の名前をクリックして、[関数の詳細] ページに移動します。
  3. [編集] をクリックします。
  4. ページの最後にある [ランタイム、ビルド...] セクションを開き、[ランタイム] タブをクリックします。
  5. [同時実行] で、[インスタンスあたりの最大同時リクエスト] フィールドに同時実行値を入力します。
  6. [次へ] をクリックします。
  7. [デプロイ] をクリックします。

    これは変更を有効にするために必要なステップです。

Cloud Run を使用して同時実行を設定する

gcloud

gcloud CLI を使用して同時実行の値を設定するには、基盤となる Cloud Run サービスを更新し、--concurrency フラグを指定します。

gcloud run services update YOUR_FUNCTION_NAME --concurrency CONCURRENCY_VALUE

ここで、CONCURRENCY_VALUE はコンテナ インスタンスごとに許可される同時リクエストの最大数です。サーバーのデフォルト値を受け取るには、同時実行を未指定のままにします。

コンソール

Google Cloud コンソールを使用して同時実行の値を設定するには:

  1. Google Cloud コンソールで Cloud Functions の概要ページに移動します。
  2. 関数の名前をクリックして、[関数の詳細] ページに移動します。
  3. [Powered by Cloud Run] と表示されたペインで、関数の名前をクリックして、基礎となる Cloud Run サービスの [サービスの詳細] ページに移動します。
  4. ページの上部にある [新しいリビジョンの編集とデプロイ] をクリックします。
  5. [コンテナ] タブを開きます。
  6. [インスタンスあたりの最大同時リクエスト数] フィールドに同時実行数を入力します。

    [インスタンスあたりの最大同時リクエスト数] に指定した値が 1 より大きい場合は、ページを下にスクロールして [コンテナ] セクションを開きます。CPU フィールドの値が 1 以上であることを確認します。

  7. [デプロイ] をクリックします。

    これは変更を有効にするために必要なステップです。

第 2 世代の Cloud Functions は、Cloud Run によって提供される同時実行サポート上に構築されています。詳細については、Cloud Run ドキュメントのインスタンス(サービス)あたりの最大同時リクエスト数をご覧ください。