コンテナのヘルスチェック(サービス)

HTTP、TCP、gRPC 起動ヘルスチェックのプローブと、新規および既存の Cloud Run サービスに対する HTTP と gRPC のライブネス プローブを構成できます。YAML ファイルを使用して、Cloud Run サービスの起動プローブまたはライブネス プローブを構成します。構成は、プローブの種類によって異なります。

ライブネス チェック プローブを使用することで、コンテナを再起動するタイミングを判断できます。たとえば、サービスは実行されているが進まないデッドロックを捕捉した場合などです。この場合にコンテナを再起動すると、バグが発生した場合におけるサービスの可用性が向上します。

起動プローブを使用することで、コンテナが起動し、トラフィックを受け入れる準備が整うタイミングを把握できます。

起動プローブを構成すると、コンテナを起動したことを起動プローブが把握するまで、ライブネス チェックは無効になります。これにより、サービス起動時での干渉が防止されます。

起動プローブは、開始が遅いコンテナでライブネス チェックを行う場合に特に役立ちます。これは、コンテナが起動して動作する前にシャットダウンされることを防ぐためです。

サービスで起動またはライブネス プローブの失敗が繰り返し発生すると、制御不能なクラッシュ ループを防ぐため、Cloud Run はインスタンスの再起動を制限します。

課金と CPU の割り当て

  • すべてのプローブに CPU が割り当てられています
  • すべてのプローブは CPU 使用率とメモリ使用量に対して課金されますが、リクエスト ベースの料金は発生しません。

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

起動プローブを構成する

HTTP、TCP、gRPC のプローブを構成できます。

HTTP 起動プローブを構成する

HTTP 用のデフォルトの HTTP 起動プローブはありませんが、Cloud Run サービス用に構成できます。HTTP ヘルスチェック プローブを使用するには、プローブに対応する HTTP ヘルスチェック エンドポイントを作成する必要があります。また、サービスは HTTP/2 ではなく HTTP/1(Cloud Run のデフォルト)を使用する必要があります。

起動プローブが構成されると、Cloud Run はサービス ヘルスチェック エンドポイント(たとえば、/ready)に HTTP GET リクエストを送信します。200400 の間のすべてのレスポンスは成功であり、他のすべてのレスポンスは失敗を示します。

起動プローブが指定時間(failureThreshold * periodSeconds)内に成功しなかった場合(240 秒を超えた場合)、コンテナはシャットダウンされます。

HTTP 起動プローブが指定時間内に成功し、HTTP ライブネス プローブを構成している場合、HTTP ライブネス プローブが開始されます。

既存のサービスの場合、HTTP 起動プローブは Google Cloud コンソールを使用して構成します。新規または既存のサービスの場合は YAML を使用して構成します。

コンソール

  1. Cloud Run に移動します

  2. 構成するサービスをクリックします。

  3. [YAML] タブをクリックします。

  4. [編集] をクリックし、次に示すように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
                httpHeaders:
                  - name: HEADER_NAME
                    value: HEADER_VALUE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • PATH は、HTTP エンドポイントの相対パス(例: /ready)に置き換えます。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • (省略可)httpHeaders を使用すると、次のように HEADER_NAME フィールドと HEADER_VALUE フィールドを使用して複数または繰り返しのカスタム ヘッダーを指定できます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  5. [新しいリビジョンを保存してデプロイする] をクリックします。

YAML

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

  1. 次のコマンドで、構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次のように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
                httpHeaders:
                  - name: HEADER_NAME
                    value: HEADER_VALUE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • PATH は、HTTP エンドポイントの相対パス(例: /ready)に置き換えます。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • (省略可)httpHeaders を使用すると、次のように HEADER_NAME フィールドと HEADER_VALUE フィールドを使用して複数または繰り返しのカスタム ヘッダーを指定できます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

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

次に示すように、startup_probe 属性を使用して Cloud Run サービスを構成します。

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

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      startup_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        http_get {
          path = "/"
          # Custom headers to set in the request
          # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#http_headers
          http_headers {
            name  = "Access-Control-Allow-Origin"
            value = "*"
          }
        }
      }
    }
  }
}

HTTP ヘルスチェック エンドポイントを作成する

HTTP 起動プローブまたはライブネス プローブ用に Cloud Run サービスを構成する場合、プローブに応答するため、サービスコードにエンドポイントを追加する必要があります。エンドポイントには任意の名前(/startup/ready など)を使用できますが、プローブ構成で path に指定した値と一致する必要があります。たとえば、HTTP 起動プローブに /ready を指定する場合は、次のようにプローブ構成で path を指定します。

startupProbe:
  httpGet:
    path: /ready

HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP サービス エンドポイントと同じ原則に従います。

TCP 起動プローブを構成する

起動プローブを自分で構成しない場合、TCP 起動プローブは新しい Cloud Run サービスのデフォルト値を使用して自動的に構成されます。デフォルトのプローブは次のものと同等です。

startupProbe:
  tcpSocket:
    port: CONTAINER_PORT
  timeoutSeconds: 240
  periodSeconds: 240
  failureThreshold: 1

ここで、CONTAINER_PORT は、サービスに使用するコンテナポートに設定されます。

これらのデフォルト値は、このセクションの手順で変更できます。

TCP 起動プローブの場合、Cloud Run は指定されたポートで TCP ソケットを開くための TCP 接続を確立します。Cloud Run が接続を確立できない場合は、失敗を示します。

起動プローブが指定時間(failureThreshold * periodSeconds)内に成功しなかった場合(240 秒を超えた場合)、コンテナはシャットダウンされます。

既存のサービスの場合、TCP 起動プローブは Google Cloud コンソールを使用して構成します。新規または既存のサービスの場合は YAML を使用して構成します。

コンソール

  1. Cloud Run に移動します

  2. 構成するサービスをクリックします。

  3. [YAML] タブをクリックします。

  4. [編集] をクリックし、次に示すように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              failureThreshold: THRESHOLD
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              periodSeconds: PERIOD
              tcpSocket:
                port: CONTAINER_PORT

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  5. [新しいリビジョンを保存してデプロイする] をクリックします。

YAML

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

  1. 次のコマンドで、構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次のように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              tcpSocket:
                port: CONTAINER_PORT
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

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

次に示すように、startup_probe 属性を使用して Cloud Run サービスを構成します。

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

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      startup_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        tcp_socket {
          port = 8080
        }
      }
    }
  }
}

gRPC 起動プローブを構成する

gRPC 起動プローブを使用するには、Cloud Run サービスに gRPC ヘルスチェック プロトコルを実装し、このセクションの説明に従ってプローブを構成する必要があります。

既存のサービスの場合、gRPC 起動プローブは Google Cloud コンソールを使用して構成します。新規または既存のサービスの場合は YAML を使用して構成します。

コンソール

  1. Cloud Run に移動します

  2. 構成するサービスをクリックします。

  3. [YAML] タブをクリックします。

  4. [編集] をクリックし、次に示すように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              grpc:
                service: GRPC_SERVICE
                port: CONTAINER_PORT
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • GRPC_SERVICE は、ヘルスチェックを送信する gRPC サービスの名前に置き換えます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  5. [新しいリビジョンを保存してデプロイする] をクリックします。

YAML

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

  1. 次のコマンドで、構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次のように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              grpc:
                service: GRPC_SERVICE
                port: CONTAINER_PORT
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • GRPC_SERVICE は、ヘルスチェックを送信する gRPC サービスの名前に置き換えます。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
      • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
      • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
      • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
      • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

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

サービスに GRPC ヘルスチェックを実装する必要があります。

次に示すように、startup_probe 属性を使用して Cloud Run サービスを構成します。

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

  template {
    containers {
      # Note: Change to the name of your image
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      startup_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        grpc {
          # Note: Change to the name of your pre-existing grpc health status service
          service = "grpc.health.v1.Health"
        }
      }
    }
  }
}

ライブネス プローブを構成する

HTTP と gRPC のライブネス プローブを構成できます。

HTTP ライブネス プローブを構成する

HTTP 起動プローブを構成すると、ライブネス プローブは起動プローブが成功した後にのみ開始されます。HTTP ヘルスチェック プローブを使用するには、プローブに対応する HTTP ヘルスチェック エンドポイントを作成する必要があります。また、サービスは HTTP/2 ではなく HTTP/1(Cloud Run のデフォルト)を使用する必要があります。

ライブネス プローブが構成され、起動プローブが成功すると、Cloud Run はサービスのヘルスチェック エンドポイント(たとえば、/health)に HTTP GET リクエストを送信します。200400 のレスポンスはどれも成功であり、他のレスポンスは失敗を意味します。

ライブネス プローブが指定時間(failureThreshold * periodSeconds)内に成功しなかった場合、コンテナは SIGKILL シグナルを使用してシャットダウンされます。コンテナによって処理されていた残りのリクエストは、HTTP ステータス コード 503 で終了します。コンテナがシャットダウンされると、Cloud Run の自動スケーリングによって新しいコンテナ インスタンスが起動されます。

既存のサービスの場合、HTTP ライブネス プローブは Google Cloud コンソールを使用して構成します。新規または既存のサービスの場合は YAML を使用して構成します。

コンソール

  1. Cloud Run に移動します

  2. 構成するサービスをクリックします。

  3. [YAML] タブをクリックします。

  4. [編集] をクリックし、次に示すように livenessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
            image: IMAGE_URL
            livenessProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
                httpHeaders:
                  - name: HEADER_NAME
                    value: HEADER_VALUE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • PATH は、HTTP エンドポイントの相対パス(例: /ready)に置き換えます。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • (省略可)httpHeaders を使用すると、次のように HEADER_NAME フィールドと HEADER_VALUE フィールドを使用して複数または繰り返しのカスタム ヘッダーを指定できます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3600 秒の値を指定します。デフォルト値は 10 秒です。
  5. [新しいリビジョンを保存してデプロイする] をクリックします。

YAML

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

  1. 次のコマンドで、構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次のように livenessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            livenessProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
                httpHeaders:
                  - name: HEADER_NAME
                    value: HEADER_VALUE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • PATH は、HTTP エンドポイントの相対パス(例: /ready)に置き換えます。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • (省略可)httpHeaders を使用すると、次のように HEADER_NAME フィールドと HEADER_VALUE フィールドを使用して複数または繰り返しのカスタム ヘッダーを指定できます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3600 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

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

サービスに GRPC ヘルスチェックを実装する必要があります。

次に示すように、liveness_probe 属性を使用して Cloud Run サービスを構成します。

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

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      liveness_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        http_get {
          path = "/"
          # Custom headers to set in the request
          # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#http_headers
          http_headers {
            name  = "Access-Control-Allow-Origin"
            value = "*"
          }
        }
      }
    }
  }
}

また、HTTP プローブの構成後、プローブに応答するヘルスチェック エンドポイントを作成する必要があります。

gRPC ライブネス プローブを構成する

gRPC 起動プローブを構成すると、ライブネス プローブは起動プローブが成功した後にのみ開始されます。なお、gRPC ヘルスチェック プローブを使用するには、Cloud Run サービスに gRPC ヘルスチェック プロトコルを実装する必要があります。

ライブネス プローブが構成され、起動プローブが成功すると、Cloud Run はサービスにヘルスチェック リクエストを行います。

ライブネス プローブが指定時間(failureThreshold * periodSeconds)内に成功しなかった場合、コンテナは SIGKILL シグナルを使用してシャットダウンされます。コンテナがシャットダウンされると、Cloud Run の自動スケーリングによって新しいコンテナ インスタンスが起動されます。

既存のサービスの場合、gRPC ライブネス プローブは Google Cloud コンソールを使用して構成します。新規または既存のサービスの場合は YAML を使用して構成します。

コンソール

  1. Cloud Run に移動します

  2. 構成するサービスをクリックします。

  3. [YAML] タブをクリックします。

  4. [編集] をクリックし、次に示すように livenessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
            image: IMAGE_URL
            livenessProbe:
              grpc:
                port: CONTAINER_PORT
                service: GRPC_SERVICE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • GRPC_SERVICE は、ヘルスチェックを送信する gRPC サービスの名前に置き換えます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3600 秒の値を指定します。デフォルト値は 10 秒です。
  5. [新しいリビジョンを保存してデプロイする] をクリックします。

YAML

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

  1. 次のコマンドで、構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次のように livenessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            livenessProbe:
              grpc:
                port: CONTAINER_PORT
                service: GRPC_SERVICE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

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

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • (省略可)CONTAINER_PORT は、サービスに使用するコンテナポートに設定する必要があります。
    • GRPC_SERVICE は、ヘルスチェックを送信する gRPC サービスの名前に置き換えます。
    • (省略可)DELAY は、コンテナが開始された後、最初のプローブを実行するまでに待機する秒数に置き換えます。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • (省略可)TIMEOUT は、プローブがタイムアウトするまでの待機時間(秒)に置き換えます。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
    • (省略可)THRESHOLD は、コンテナを「未準備」とマークする前にプローブを再試行する回数に置き換えます。デフォルト値は 3 です。
    • (省略可)PERIOD は、プローブを実行する期間(秒単位)に置き換えます。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3600 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

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

次に示すように、liveness_probe 属性を使用して Cloud Run サービスを構成します。

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

  template {
    containers {
      # Note: Change to the name of your image
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      liveness_probe {
        failure_threshold     = 5
        initial_delay_seconds = 10
        timeout_seconds       = 3
        period_seconds        = 3

        # Note: Change to the name of your pre-existing grpc health status service
        grpc {
          service = "grpc.health.v1.Health"
        }
      }
    }
  }
}