CPU の割り当て

デフォルトでは、Cloud Run コンテナ インスタンスには、リクエストの処理中とコンテナの起動時にのみ CPU が割り当てられます。この動作を変更すると、受信リクエストがない場合でも CPU が常に割り当て、利用可能な状態にすることができます。CPU を常に割り当てるように設定すると、バックグラウンド タスクやその他の非同期処理タスクの実行に役立ちます。

CPU が常に割り当てられている場合でも、Cloud Run の自動スケーリングは引き続き有効であり、受信トラフィックの処理に必要ないコンテナ インスタンスは停止できます。リクエスト処理後 15 分を過ぎるとインスタンスのアイドル状態は解除されます(ただし、最小インスタンス数を使用してアクティブ状態が保持されている場合は除きます)。

CPU には常に多数の最小インスタンスを割り当てると、多数のコンテナ インスタンスが起動されて CPU リソースへの完全アクセス権が付与されます。これにより、Pub/Sub メッセージの引き出しなどのバックグラウンド処理のユースケースが可能になります。

料金への影響

リクエスト処理中にのみ割り当てる CPU を選択した場合、リクエストごとに、コンテナ インスタンスがリクエストを処理したときにのみ課金されます。CPU の常時割り当てを設定すると、コンテナ インスタンスのライフサイクル全体で料金が発生します。詳細については、Cloud Run の料金表をご覧ください。

適切な CPU 割り当てを選択する方法

ユースケースに適した CPU 割り当ての選択は、トラフィック パターン、バックグラウンド実行、コストなど、いくつかの要因によって決まります。それぞれについて、以降のセクションで説明します。

トラフィック パターンの考慮事項

  • リクエスト処理中にのみ割り当てられる CPU は、受信トラフィックが散発的に増加するか、バーストやスパイクが多い場合に推奨されます。
  • 受信トラフィックが安定してゆっくり変化する場合は、[常に CPU を割り当てる] をおすすめします。

バックグラウンド実行に関する考慮事項

[常に割り当てた CPU] を選択すると、レスポンスを返した後、バックグラウンド タスクやその他の非同期処理作業を実行できます。例:

  • バックグラウンドで実行できると思われる OpenTelemetry などのモニタリング エージェントを利用する。
  • Go の Goroutine または Node.js async、Java スレッド、Kotlin コルーチンを使用する
  • 組み込みのスケジューリング/バックグラウンド機能に依存するアプリケーション フレームワークを使用する。

費用に関する考慮事項

現在、リクエストの処理中に割り当てられた CPU のみを使用している場合は、常に割り当てられる CPU の方が経済的である可能性があります。

  • Cloud Run サービスが多数のリクエストを現在と一定のレートで処理している。
  • コンテナ インスタンス数の指標を表示するときに、「アイドル状態」のコンテナ インスタンスが多数表示されることはありません。

料金計算ツールを使用すると、費用の違いを見積もることができます。

CPU 割り当ての設定と更新

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

CPU の常時割り当てオプションを選択する場合は、512 MiB 以上のメモリを指定する必要があります。

デフォルトでは、各コンテナ インスタンスのリクエストの処理中にのみ CPU が割り当てられます。この設定は、新しいサービスの作成時または新しいリビジョンのデプロイ時に、Cloud Console、gcloud コマンドライン、YAML ファイルを使用して変更できます。

Console

  1. Cloud Run に移動します

  2. デプロイ先の新しいサービスを構成する場合は、[サービスの作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[次へ] > [詳細設定] の順にクリックしてサービス構成ページに移動します。

  4. [コンテナ] タブをクリックします。

    画像

  5. [CPU の割り当てと料金] で、目的の CPU 割り当てを選択します。インスタンスがリクエストを受信しているときにのみ CPU を割り当てるようにするには、[リクエストの処理中にのみ CPU を割り当てる] を選択します。コンテナ インスタンスの存続期間全体で CPU を割り当てる場合は、[CPU を常に割り当てる] を選択します。

  6. [作成] または [デプロイ] をクリックします。

コマンドライン

CPU 割り当てを更新できます。特定のサービスに対して常に CPU が割り当てられるように設定するには:

gcloud beta run services update SERVICE --no-cpu-throttling 

SERVICE は、実際のサービス名に置き換えます。

リクエストの処理中にのみ CPU を割り当てるように設定するには:

gcloud beta run services update SERVICE --cpu-throttling 

デプロイ中に CPU 割り当てを設定することもできます。CPU を常時割り当てられるように設定するには:

gcloud run deploy --image IMAGE_URL --no-cpu-throttling

リクエストの処理中にのみ CPU を割り当てるように設定するには:

gcloud run deploy --image IMAGE_URL --cpu-throttling

IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. cpu 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/cpu-throttling: 'BOOLEAN`

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • リクエスト処理中にのみ CPU を割り当てる場合は BOOLEANtrue に置き換えます。CPU を常時割り当てる場合は false に置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

CPU 割り当て設定の表示

サービスの現在の CPU 割り当て設定を表示するには:

Console

  1. Cloud Run に移動します

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [変更内容] タブをクリックします。

  4. 右側の詳細パネルの [コンテナ] タブに、CPU 割り当て設定が表示されます。

コマンドライン

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、CPU 割り当ての設定を見つけます。