サービスの課金設定

このページでは、デフォルトの Cloud Run 自動スケーリング動作を使用することを前提として、課金設定について説明します。手動スケーリングを使用する場合のその他の考慮事項については、手動スケーリングを使用した課金の動作をご覧ください。

Cloud Run サービスには、次の 2 つの課金設定があります。

  • リクエスト ベースの課金(デフォルト): Cloud Run インスタンスは、リクエストの処理、起動、シャットダウン時にのみ課金されます。詳細については、インスタンスのライフサイクルをご覧ください。この設定は、以前は「リクエストの処理中にのみ CPU を割り当てる」と呼ばれていました。

  • インスタンス ベースの課金: Cloud Run インスタンスは、受信リクエストがない場合でも、インスタンスのライフサイクル全体に対して課金されます。インスタンスベースの課金は、短期のバックグラウンド タスクやその他の非同期処理タスクの実行に役立ちます。この設定は以前は [CPU を常に割り当てる] と呼ばれていました。

リクエスト ベースの課金を選択した場合、インスタンスがリクエストを処理した場合にのみ、リクエストごとに課金されます。インスタンス ベースの課金を選択すると、インスタンスのライフサイクル全体に対して課金されます。詳細については、Cloud Run の料金表をご覧ください。

Recommender は、過去 1 か月間に Cloud Run サービスが受信したトラフィックを自動的に調べ、料金が安い場合、リクエストベースの課金からインスタンスベースの課金に切り替えるよう推奨します。

CPU 割り当ての影響

課金設定を選択すると、CPU の割り当て方法に影響します。

  • リクエストベースの課金では、CPU はリクエストの処理中にのみ割り当てられます。
  • インスタンス ベースの課金では、コンテナ インスタンスのライフサイクル全体で CPU が割り当てられます。

適切な課金設定を選択する方法

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

トラフィック パターンに関する考慮事項

  • 受信トラフィックが散発的か、バーストまたは急増する場合は、リクエスト ベースの課金をおすすめします。
  • 受信トラフィックが安定して緩やかであれば、インスタンスベースの課金をおすすめします。

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

[インスタンスベースの課金] を選択すると、リクエスト処理以外でも CPU が割り振られるため、レスポンスを返した後に短期のバックグラウンド タスクなどの非同期処理を実行できます。例:

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

アイドル状態のインスタンス(最小インスタンスを使用してウォーム状態を維持したインスタンスを含む)は、いつでもシャットダウンできます。コンテナが終了する前に未処理のタスクを完了する必要がある場合は、SIGTERM をトラップして、インスタンスが停止するまでに 10 秒の猶予期間を設けることができます。

非同期タスクの実行には、Cloud Tasks の使用を検討してください。Cloud Tasks は、失敗したタスクを自動的に再試行し、最大 30 分の実行時間をサポートします。

費用に関する考慮事項

リクエスト ベースの課金を使用している場合、次の条件を満たしている場合は、インスタンス ベースの課金の方が経済的です。

  • Cloud Run サービスが、現在の多くのリクエストを一定の速度で処理している。
  • インスタンス数の指標で、アイドル状態のインスタンスが多くない。

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

自動スケーリングに関する考慮事項

Cloud Run は、デフォルトでコンテナ インスタンスの数を自動スケーリングします。

リクエスト ベースの課金に設定されたサービスの場合、Cloud Run はリクエストの処理中にのみ CPU 使用率に基づいてインスタンス数を自動スケーリングします。

インスタンスベースの課金に設定されたサービスの場合、Cloud Run は、コンテナ インスタンスのライフサイクル全体で CPU 使用率に基づいてインスタンス数を自動スケーリングします。ただし、ゼロへのスケーリングとゼロからのスケーリングの場合は、リクエストのみを使用します。

Cloud Run 自動スケーリング機能ではなく手動スケーリングを使用する場合のその他の考慮事項については、手動スケーリングをご覧ください。

インスタンスベースの課金に関する考慮事項

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

インスタンスベースの課金と多数の最小インスタンスを組み合わせると、多数のインスタンスが起動され、CPU リソースへの完全アクセス権が付与されます。これにより、バックグラウンド処理のユースケースが有効になります。このパターンを使用すると、サービスがリクエスト以外で CPU を使用している場合でも、Cloud Run はインスタンスの自動スケーリングを適用します。

ヘルスチェック プローブを使用する場合は、すべてのプローブでインスタンスベースの課金を使用する必要があります。課金の詳細については、コンテナ ヘルスチェック プローブをご覧ください。

必要なロール

Cloud Run サービスの構成とデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ソースコードからサービスまたは関数をデプロイする場合は、プロジェクトと Cloud Build サービス アカウントに追加のロールが付与されている必要があります。

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

請求設定と更新

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

インスタンス ベースの課金を選択する場合は、512 MiB 以上のメモリを指定する必要があります。

課金設定を変更するには、新しいサービスを作成するとき、または新しいリビジョンをデプロイするときに、 Google Cloud コンソール、gcloud CLI、または YAML ファイルを使用します。

コンソール

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

  2. メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして、新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定ページに記入します。

  4. [請求] で、お支払い設定を選択します。インスタンスがリクエストの処理中にのみ課金されるようにするには、[リクエスト ベースの課金] を選択します。インスタンスのライフサイクル全体に対して課金されるように、インスタンスのインスタンス ベースの課金を選択します。

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

gcloud

お支払い設定を更新できます。特定のサービスに対してインスタンスベースの課金を設定するには:

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

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

リクエストベースの課金を設定するには:

gcloud run services update SERVICE --cpu-throttling 

デプロイ中に課金設定を設定することもできます。請求設定をインスタンスベースの課金に設定するには:

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

請求設定をリクエスト ベースの課金に設定するには:

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

IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG の形式です。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    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'
          name: REVISION

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

    • SERVICE: Cloud Run サービスの名前
    • BOOLEAN: リクエスト課金を設定する場合は true、インスタンス ベースの課金を設定する場合は false に置き換えます。
    • REVISION は、新しいリビジョン名に置き換えるか、削除します(存在する場合)。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります
      • SERVICE- で始まる
      • 小文字、数字、- のみが使用されている
      • 末尾が - ではない
      • 63 文字以内である
  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-cpu-allocation"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        # If true, garbage-collect CPU when once a request finishes
        cpu_idle = false
      }
    }
  }
}

請求設定を表示する

Cloud Run サービスの現在の請求設定を表示するには:

コンソール

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

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

  3. [リビジョン] タブをクリックします。

  4. 右側の詳細パネルで、請求設定が 一般 タブに一覧表示されます。

gcloud

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

    gcloud run services describe SERVICE
  2. 返された構成で、請求設定を見つけます。