レガシー ヘルスチェックからスプリット ヘルスチェックへの移行

2019 年 9 月 15 日以降、レガシー ヘルスチェックを使用していてもアプリケーションは引き続き実行されてヘルスチェックを受けますが、こうしたアプリケーションの新しいバージョンはデプロイできなくなります。

このページでは、レガシー ヘルスチェックからスプリット ヘルスチェックへのアップグレードについて説明します。

ヘルスチェックのタイプを確認する

アプリケーションで使用しているヘルスチェックのタイプを確認するには、次のコマンドを実行します。

gcloud app describe

アプリケーションでスプリット ヘルスチェックを使用している場合は、出力される説明に次の情報が含まれます。

featureSettings:
    splitHealthChecks: true

重要な相違点について

スプリット ヘルスチェックにアップグレードする前に、以下に示すレガシー ヘルスチェックとスプリット ヘルスチェックとの重要な相違点を確認してください。

  • スプリット ヘルスチェックの HTTP リクエストは、デフォルトでは転送されません。一方、レガシー ヘルスチェックではデフォルトでアプリケーションの /_ah/health パスに転送されます。

  • スプリット ヘルスチェックが転送された場合、200 OK が返されなければ、アプリが正常な状態であるとはみなされません。レガシー ヘルスチェックでは、次の HTTP コードが正常とみなされます。200301302303307401402403404405

実行チェックパスまたは準備チェックパスを指定しない場合、デフォルトではスプリット ヘルスチェックにより、VM インスタンスと Docker コンテナが実行中であることだけが確認されます。こうした条件が満たされている限り、VM はトラフィックを受信し続け、アプリの内部状態に関係なく存続します。

一方、レガシー ヘルスチェックが有効になっている場合、アプリの /_ah/health パスが異常を示す HTTP エラーコード(例: 5XX)を返すと、レガシー ヘルスチェックが失敗し、VM はトラフィックの受信を停止して再起動します。

アプリがデフォルトのレガシー ヘルスチェックの動作に依存している場合は、状況に応じて実行チェックパス準備チェックパスを設定します。

レガシー ヘルスチェック オプションを変換する

レガシー ヘルスチェックの各オプションは、スプリット ヘルスチェックを使用して次のように書き換えることができます。

オプション スプリット ヘルスチェックで同じ動作を維持する
enable_health_check True または未設定の場合、liveness_check.pathreadiness_check.path を、アプリが正常な場合に 200 OK を返すパスに構成します。
check_interval_sec liveness_check.check_interval_secreadiness_check.check_interval_sec を同じ値に構成します。
timeout_sec liveness_check.timeout_secreadiness_check.timeout_sec を同じ値に構成します。
unhealthy_threshold readiness_check.failure_threshold を同じ値に構成します。
healthy_threshold liveness_check.success_thresholdreadiness_check.success_threshold を同じ値に構成します。
restart_threshold liveness_check.failure_threshold を同じ値に構成します。check_interval_sec オプションに failure_threshold オプションを掛けた値が、異常な VM を使用不可にするためにかかる時間になります。

スプリット ヘルスチェックを有効にする

レガシー ヘルスチェックからスプリット ヘルスチェックに移行し、昇格された 5xx ステータス コードが表示されないようにするには、次の手順を行います。

  1. レガシー ヘルスチェックとスプリット ヘルスチェックとの重要な相違点を理解します。

  2. アプリケーションの各バージョンのレガシー ヘルスチェック オプションを変換します。

    別の方法として、app.yaml ファイルの liveness_check セクションまたは readiness_check セクションをバージョンごとにカスタマイズすることもできます。例については、実行チェック準備チェックをご覧ください。

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

    gcloud app update --split-health-checks --project [YOUR_PROJECT_ID]
  4. レガシー ヘルスチェックにカスタマイズした設定を使用した場合、app.yaml ファイルから health_check セクションを削除する必要があります。

  5. 新しいメジャー バージョンのアプリをデプロイし、実行状況と準備状況のヘルスチェックを開始します。