インスタンスのコンテナのヘルスチェックを構成する

Cloud Run ヘルスチェックは、コンテナ インスタンスが正しく実行され、トラフィックを処理できることを確認します。Cloud Run のヘルスチェックを使用すると、コンテナがリクエストを受信する準備が整うタイミングと、コンテナが異常と見なされて再起動が必要なタイミングをカスタマイズできます。

ユースケース

次のタイプのヘルスチェック プローブを構成できます。

  • 起動プローブは、コンテナが起動し、トラフィックを受け入れる準備ができているかどうかを判断します。
  • ライブネス プローブは、コンテナを再起動するかどうかを判断します。
    • この場合、コンテナを再起動すると、バグが発生したときにインスタンスの可用性を高めることができます。
    • ライブネス プローブは、他の方法では復元できない個々のインスタンスを再起動することを目的としています。主に、回復不能なインスタンス障害に使用します。たとえば、インスタンスは実行されているが、処理が進まないデッドロックを捕捉する場合などです。カスタムの組織のポリシーを使用して、すべてのコンテナでライブネス プローブを必須にできます。
    • インスタンスでプローブの失敗が繰り返し発生すると、制御不能なクラッシュ ループを防ぐため、Cloud Run はインスタンスの再起動を制限します。
  • 準備状況プローブ(プレビュー)

    準備状況プローブは、Cloud Run インスタンスのインスタンスがトラフィックを処理するタイミングを決定します。準備状況チェックは、コンテナの起動プローブが正常に完了した後に開始されます。インスタンスの準備状況プローブが構成済みの失敗しきい値を超えて失敗すると、Cloud Run はそのインスタンスへの新しいトラフィックの送信を停止します。Cloud Run は、インスタンスを終了せず、準備状況プローブが再び成功すると、インスタンスへのトラフィックの送信を再開します。

コンテナでは、startupProbe、livenessProbe、readinessProbe を一貫して実装する必要があります。起動チェックが完了すると、Cloud Run はコンテナがトラフィックを処理する準備が整ったと見なします。

起動プローブで準備状況を考慮できるように、ロジックをカプセル化することをおすすめします。Cloud Run は、最初の準備状況プローブが完了する前に新しいインスタンスにトラフィックを転送できるため、起動プローブに合格すると、トラフィックをすぐに安全に処理できることを確認してください。起動プローブが成功すると、コンテナはトラフィックを受け入れる準備ができたと見なされます。

起動プローブを構成する

HTTP、TCP、gRPC のプローブは、Google Cloud CLI または YAML を使用して構成できます。

gcloud

TCP 起動

次のコマンドを実行します。

  gcloud beta run instances create INSTANCE \
      --image=IMAGE_URL \
      --startup-probe tcpSocket.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート
  • DELAY: コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
  • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
  • THRESHOLD: コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
  • PERIOD: プローブを実行する期間(秒単位)。 たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。

HTTP 起動

プローブに応答するために、インスタンス コードに HTTP/1 エンドポイント(HTTP/2 ではなく Cloud Run のデフォルト)を追加します。エンドポイント名(/startup/health/are_you_ready など)は、プローブ構成の path と一致する必要があります。HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP インスタンス エンドポイントと同じ原則に従います。

次のコマンドを実行します。

  gcloud beta run instances create INSTANCE \
      --image=IMAGE_URL \
      --startup-probe httpGet.path=PATH,httpGet.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • PATH: HTTP エンドポイントの相対パス(例: /health)。
  • CONTAINER_PORT(省略可): インスタンスに使用するコンテナポートに設定します。
  • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
  • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
  • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
  • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。

gRPC 起動

コンテナ イメージが gRPC ヘルスチェック プロトコルを実装していることを確認します。

次のコマンドを実行します。

  gcloud beta run instances create INSTANCE \
      --image=IMAGE_URL \
      --startup-probe grpc.port=CONTAINER_PORT,grpc.instance=GRPC_INSTANCE,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • GRPC_INSTANCE(省略可): 設定されている場合、grpc.health.v1.Health.Check RPC が呼び出されると、grpc.health.v1.HealthCheckRequest の instance フィールドで使用されます。
  • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート
  • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
  • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
  • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
  • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。

YAML

TCP 起動

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

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
     name: INSTANCE
     annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        startupProbe:
          tcpSocket:
            port: CONTAINER_PORT
          initialDelaySeconds: DELAY
          timeoutSeconds: TIMEOUT
          failureThreshold: THRESHOLD
          periodSeconds: PERIOD

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート
    • DELAY: コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • THRESHOLD: コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
    • PERIOD: プローブを実行する期間(秒単位)。 たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、インスタンスを作成または更新します。
    gcloud beta run instances replace instance.yaml

HTTP 起動

プローブに応答するために、インスタンス コードに HTTP/1 エンドポイント(HTTP/2 ではなく Cloud Run のデフォルト)を追加します。エンドポイント名(/startup/health/are_you_ready など)は、プローブ構成の path と一致する必要があります。HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP インスタンス エンドポイントと同じ原則に従います。

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

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    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

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • PATH: HTTP エンドポイントの相対パス(例: /health)。
    • CONTAINER_PORT(省略可): インスタンスに使用するコンテナポートに設定します。
    • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
    • 省略可: httpHeaders を使用すると、次のように HEADER_NAME フィールドと HEADER_VALUE フィールドを使用して複数または繰り返しのカスタム ヘッダーを指定できます。
    • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
    1. 新しいインスタンスを作成する場合は、この手順をスキップします。既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。

      gcloud beta run instances describe INSTANCE --format export > instance.yaml

gRPC 起動

コンテナ イメージが gRPC ヘルスチェック プロトコルを実装していることを確認します。

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

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように startupProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        startupProbe:
          grpc:
            instance: GRPC_INSTANCE
            port: CONTAINER_PORT
          initialDelaySeconds: DELAY
          timeoutSeconds: TIMEOUT
          failureThreshold: THRESHOLD
          periodSeconds: PERIOD

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • GRPC_INSTANCE(省略可): 設定されている場合、grpc.health.v1.Health.Check RPC が呼び出されると、grpc.health.v1.HealthCheckRequest の instance フィールドで使用されます。
    • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート
    • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
    • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~240 の値を指定します。デフォルトは 1 です。
    • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~240 秒の値を指定します。デフォルト値は 10 秒です。
  3. 新しいインスタンスを作成する場合は、この手順をスキップします。既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud beta run instances describe INSTANCE --format export > instance.yaml

デフォルトの TCP 起動プローブ

新しい Cloud Run インスタンスの TCP 起動プローブが明示的に構成されていない場合、Cloud Run は次のデフォルト値を使用して TCP 起動プローブを自動的に構成します。

startupProbe:
          timeoutSeconds: 240
          periodSeconds: 240
          failureThreshold: 1

これらのデフォルト値は、このページのプローブの構成の手順に従って変更できます。

Startup Probe の要件と動作

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

起動プローブが指定時間(failureThreshold × periodSeconds)(最長で 240 秒)以内に成功しなかった場合、コンテナはシャットダウンされます。TCP のデフォルトもご覧ください。
HTTP 起動 HTTP ヘルスチェック エンドポイントを作成する
HTTP/1 を使用する
プローブの構成後、Cloud Run はヘルスチェック エンドポイント(/health など)に HTTP GET リクエストを送信します。2XX または 3XX のレスポンスは成功であり、それ以外のレスポンスは失敗を示します。

指定された時間(failureThreshold × periodSeconds、240 秒を超えない)内に起動プローブが成功しない場合、コンテナはシャットダウンされます。
gRPC 起動 Cloud Run インスタンスに gRPC ヘルスチェック プロトコルを実装する 起動プローブが指定時間(failureThreshold × periodSeconds)(最長で 240 秒)以内に成功しなかった場合、コンテナはシャットダウンされます。

livenessProbe を構成する

HTTP プローブと gRPC プローブは、Google Cloud SDK または YAML を使用して構成できます。

gcloud

HTTP ライブネス

プローブに応答するために、インスタンス コードに HTTP/1 エンドポイント(HTTP/2 ではなく Cloud Run のデフォルト)を追加します。エンドポイント名(/startup/health/are_you_ready など)は、プローブ構成の path と一致する必要があります。HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP インスタンス エンドポイントと同じ原則に従います。

次のコマンドを実行します。

  gcloud beta run instances deploy INSTANCE \
      --image=IMAGE_URL \
      --liveness-probe httpGet.path=PATH,httpGet.port=CONTAINER_PORT,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • PATH: HTTP エンドポイントの相対パス(例: /health)。
  • CONTAINER_PORT(省略可): インスタンスに使用するコンテナポートに設定します。
  • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
  • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
  • 省略可。TIMEOUT: プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
  • 省略可。PERIOD: プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3,600 秒の値を指定します。デフォルト値は 10 秒です。

gRPC ライブネス

コンテナ イメージが gRPC ヘルスチェック プロトコルを実装していることを確認します。

次のコマンドを実行します。

  gcloud beta run instances deploy INSTANCE \
      --image=IMAGE_URL \
      --liveness-probe grpc.port=CONTAINER_PORT,grpc.service=GRPC_SERVICE,initialDelaySeconds=DELAY,failureThreshold=THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • GRPC_INSTANCE(省略可): 設定されている場合、grpc.health.v1.Health.Check RPC が呼び出されると、grpc.health.v1.HealthCheckRequest の instance フィールドで使用されます。
  • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート
  • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
  • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
  • 省略可。TIMEOUT: プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
  • 省略可。PERIOD: プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3,600 秒の値を指定します。デフォルト値は 10 秒です。

YAML

HTTP ライブネス

プローブに応答するために、インスタンス コードに HTTP/1 エンドポイント(HTTP/2 ではなく Cloud Run のデフォルト)を追加します。エンドポイント名(/startup/health/are_you_ready など)は、プローブ構成の path と一致する必要があります。HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP インスタンス エンドポイントと同じ原則に従います。

  1. 新しいインスタンスを作成する場合は、この手順をスキップします。既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように livenessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    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

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • PATH: HTTP エンドポイントの相対パス(例: /health)。
    • CONTAINER_PORT(省略可): インスタンスに使用するコンテナポートに設定します。
    • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
    • 省略可: httpHeaders を使用すると、次のように HEADER_NAME フィールドと HEADER_VALUE フィールドを使用して複数または繰り返しのカスタム ヘッダーを指定できます。
    • 省略可。TIMEOUT: プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
    • 省略可。PERIOD: プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3,600 秒の値を指定します。デフォルト値は 10 秒です。
  3. 次のコマンドを使用して、インスタンスを作成または更新します。
    gcloud beta run instances replace instance.yaml

gRPC ライブネス

コンテナ イメージが gRPC ヘルスチェック プロトコルを実装していることを確認します。

  1. 新しいインスタンスを作成する場合は、この手順をスキップします。既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように livenessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        livenessProbe:
          grpc:
            port: CONTAINER_PORT
            service: GRPC_SERVICE
            initialDelaySeconds: DELAY
            timeoutSeconds: TIMEOUT
            failureThreshold: THRESHOLD
            periodSeconds: PERIOD

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • GRPC_INSTANCE(省略可): 設定されている場合、grpc.health.v1.Health.Check RPC が呼び出されると、grpc.health.v1.HealthCheckRequest の instance フィールドで使用されます。
    • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート
    • DELAY(省略可): コンテナが起動してから最初のプローブを実行するまでの待機時間(秒単位)。0 秒~240 秒の値を指定します。デフォルト値は 0 秒です。
    • THRESHOLD(省略可): コンテナをシャットダウンする前にプローブを再試行する回数。デフォルト値は 3 です。
    • 省略可。TIMEOUT: プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~3,600 の値を指定します。デフォルトは 1 です。
    • 省略可。PERIOD: プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1 秒~3,600 秒の値を指定します。デフォルト値は 10 秒です。

  3. 次のコマンドを使用して、インスタンスを作成または更新します。
    gcloud beta run instances replace instance.yaml

Liveness Probe の要件と動作

プローブの種類 要件 動作
HTTP ライブネス HTTP ヘルスチェック エンドポイントを作成する
HTTP/1 を使用する
ライブネス プローブは、起動プローブが成功した後にのみ開始されます。プローブの構成後、起動プローブが成功すると、Cloud Run はヘルスチェック エンドポイント(/health など)に HTTP GET リクエストを送信します。2XX または 3XX レスポンスはどれも成功であり、他のレスポンスは失敗を意味します。

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

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

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

readinessProbe を構成する

準備状況プローブには次の制限が適用されます。

  • セッション アフィニティを有効にすると、Cloud Run は準備状況チェックが失敗した場合でも、同じインスタンスにリクエストを送信し続けます。

準備状況プローブは、Google Cloud CLI または YAML を使用して構成できます。

gcloud

HTTP の準備状況

プローブに応答するために、インスタンス コードに HTTP/1 エンドポイント(HTTP/2 ではなく Cloud Run のデフォルト)を追加します。エンドポイント名(/startup/health/are_you_ready など)は、プローブ構成の path と一致する必要があります。HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP インスタンス エンドポイントと同じ原則に従います。

次のコマンドを実行します。

gcloud beta run instances deploy INSTANCE \
    --image=IMAGE_URL \
    --readiness-probe httpGet.path=PATH,httpGet.port=CONTAINER_PORT,successThreshold=SUCCESS_THRESHOLD,failureThreshold=FAILURE_THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • PATH(省略可): HTTP エンドポイントの相対パス(例: /are_you_ready)。デフォルトのパスは / です。
  • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート。デフォルトのポートはメインの上り(内向き)ポートです。
  • SUCCESS_THRESHOLD(省略可): 失敗後にプローブが成功とみなされるために必要な最小の連続成功回数。デフォルトは 2 です。
  • FAILURE_THRESHOLD(省略可): 失敗を報告する前にプローブを再試行する回数。この回数を超えると、インスタンスはトラフィックの受信を停止します。デフォルトは 3 です。
  • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~300 の値を指定します。デフォルトは 1 です。
  • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1~300 の値を指定します。デフォルト値は 10 秒です。

gRPC の準備状況

コンテナ イメージが gRPC ヘルスチェック プロトコルを実装していることを確認します。

次のコマンドを実行します。

gcloud beta run instances deploy INSTANCE \
    --image=IMAGE_URL \
    --readiness-probe grpc.port=CONTAINER_PORT,grpc.instance=GRPC_INSTANCE,successThreshold=SUCCESS_THRESHOLD,failureThreshold=FAILURE_THRESHOLD,timeoutSeconds=TIMEOUT,periodSeconds=PERIOD

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

  • INSTANCE: Cloud Run インスタンスの名前。
  • 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 です。
  • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート。デフォルトのポートはメインの上り(内向き)ポートです。
  • GRPC_INSTANCE(省略可): 設定されている場合、grpc.health.v1.Health.Check RPC が呼び出されると、grpc.health.v1.HealthCheckRequest の instance フィールドで使用されます。
  • SUCCESS_THRESHOLD(省略可): 失敗後にプローブが成功とみなされるために必要な最小の連続成功回数。デフォルトは 2 です。
  • FAILURE_THRESHOLD(省略可): 失敗を報告する前にプローブを再試行する回数。この回数を超えると、インスタンスはトラフィックの受信を停止します。デフォルトは 3 です。
  • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~300 の値を指定します。デフォルトは 1 です。
  • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1~300 の値を指定します。デフォルト値は 10 秒です。

YAML

HTTP の準備状況

プローブに応答するために、インスタンス コードに HTTP/1 エンドポイント(HTTP/2 ではなく Cloud Run のデフォルト)を追加します。エンドポイント名(/startup/health/are_you_ready など)は、プローブ構成の path と一致する必要があります。HTTP ヘルスチェック エンドポイントは外部からアクセスでき、外部に公開される他の HTTP インスタンス エンドポイントと同じ原則に従います。

  1. 新しいインスタンスを作成する場合は、この手順をスキップします。既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように readinessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            readinessProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
              successThreshold: SUCCESS_THRESHOLD
              failureThreshold: FAILURE_THRESHOLD
              timeoutSeconds: TIMEOUT
              periodSeconds: PERIOD

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • PATH(省略可): HTTP エンドポイントの相対パス(例: /are_you_ready)。デフォルトのパスは / です。
    • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート。デフォルトのポートはメインの上り(内向き)ポートです。
    • SUCCESS_THRESHOLD(省略可): 失敗後にプローブが成功とみなされるために必要な最小の連続成功回数。デフォルトは 2 です。
    • FAILURE_THRESHOLD(省略可): 失敗を報告する前にプローブを再試行する回数。この回数を超えると、インスタンスはトラフィックの受信を停止します。デフォルトは 3 です。
    • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~300 の値を指定します。デフォルトは 1 です。
    • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1~300 の値を指定します。デフォルト値は 10 秒です。

  3. 次のコマンドを使用して、インスタンスを作成または更新します。
    gcloud beta run instances replace instance.yaml

gRPC の準備状況

コンテナ イメージが gRPC ヘルスチェック プロトコルを実装していることを確認します。

  1. 新しいインスタンスを作成する場合は、この手順をスキップします。既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。
    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次のように readinessProbe 属性を構成します。

    apiVersion: serving.knative.dev/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            readinessProbe:
              grpc:
                port: CONTAINER_PORT
                instance: GRPC_INSTANCE
              successThreshold: SUCCESS_THRESHOLD
              failureThreshold: FAILURE_THRESHOLD
              timeoutSeconds: TIMEOUT
              periodSeconds: PERIOD

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • 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 です。
    • CONTAINER_PORT(省略可): インスタンスに使用されるコンテナポート。デフォルトのポートはメインの上り(内向き)ポートです。
    • GRPC_INSTANCE(省略可): 設定されている場合、grpc.health.v1.Health.Check RPC が呼び出されると、grpc.health.v1.HealthCheckRequest の instance フィールドで使用されます。
    • SUCCESS_THRESHOLD(省略可): 失敗後にプローブが成功とみなされるために必要な最小の連続成功回数。デフォルトは 2 です。
    • FAILURE_THRESHOLD(省略可): 失敗を報告する前にプローブを再試行する回数。この回数を超えると、インスタンスはトラフィックの受信を停止します。デフォルトは 3 です。
    • TIMEOUT(省略可): プローブがタイムアウトするまでの待機時間(秒)。この値は、periodSeconds に指定された値を超えることはできません。1~300 の値を指定します。デフォルトは 1 です。
    • PERIOD(省略可): プローブを実行する期間(秒単位)。たとえば、2 秒ごとにプローブを実行する場合は 2 です。1~300 の値を指定します。デフォルト値は 10 秒です。

  3. 次のコマンドを使用して、インスタンスを作成または更新します。
    gcloud beta run instances replace instance.yaml

CPU の割り当て

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

次のステップ