Blue/Green デプロイの切り替えを実行する

グリーン環境をテストして検証したら、切り替えを開始して、グリーン環境を新しい本番環境の読み取り / 書き込み環境に変換します。

始める前に

スイッチオーバーを開始する前に、必要な権限があることと、デプロイがカットオーバーの準備ができていることを確認してください。

必要なロールと権限

切り替えの実行に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • Cloud SQL 管理者(roles/cloudsql.admin)

カスタムロールの場合は、次の権限があることを確認します。

  • cloudsql.blueGreenDeployments.switchover
  • cloudsql.blueGreenDeployments.get
  • cloudsql.instances.switchover
  • cloudsql.operations.get

Cloud SQL の IAM ロールと権限の詳細については、ロールと権限をご覧ください。

切り替え前の検証

スイッチオーバーを開始する前に、次の条件を確認します。

  1. デプロイの状態: デプロイは SWITCHOVER_READY 状態である必要があります。
  2. ワークロードの検証: 緑色のステージング インスタンスでテストと検証をすべて完了します。
  3. レプリケーションの遅延を短縮する: 切り替え時間を短縮するために、青と緑の間のレプリケーションの遅延を最小限に抑えます。

切り替えの仕組み

スイッチオーバーを開始すると、Cloud SQL は次の自動シーケンスを実行します。

  1. スイッチオーバー前の検証: スイッチオーバー オペレーションの前に、Cloud SQL はレプリケーションが中断されていないことを検証し、一連の構成チェックを実行して、デプロイの準備が整っていることを確認します。
  2. スイッチオーバー ワークフローの実行: ワークフローの実行中に、Cloud SQL はカットオーバー用にインスタンスを準備します。レプリケーションの遅延が大きすぎる場合や、アクティブなトランザクションがカットオーバーをブロックしている場合、切り替えオペレーションは失敗し、本番環境の青い環境はオンラインのままになります。
  3. トラフィックのリダイレクト: Cloud SQL は、ブルー インスタンスとグリーン インスタンス間で接続エンドポイントを入れ替えます。
  4. ロールの変換: 緑色のインスタンスがアクティブな本番環境の読み取り / 書き込みインスタンスになり、青色のインスタンスがスタンドアロンの読み取り / 書き込みインスタンスになります。

切り替え中、アプリケーション接続は短時間(通常は数秒)中断してから、アップグレードされた本番環境インスタンスに自動的に再接続します。切り替えのダウンタイムは、Cloud SQL のエディションによって異なります。

  • Cloud SQL Enterprise Plus エディション: スイッチオーバーのダウンタイムは通常 1 秒未満です。
  • Cloud SQL Enterprise エディション: 通常、ワークロードとレプリケーションの遅延に応じて、切り替えのダウンタイムは 60 秒未満です。アプリケーション構成や接続文字列の変更は必要ありません。

切り替えのライフサイクル状態

切り替えの前、切り替え中、切り替え後に、デプロイは state レスポンス フィールドで次の状態に移行します。

  • SWITCHOVER_READY: Blue から Green への論理レプリケーションが正常で、デプロイの切り替えの準備ができています。SWITCHOVER_READY ステータスは、レプリケーションが正常であるかどうかにのみ依存します。Cloud SQL は、このステータスを設定するときにレプリケーションの遅延を評価しません。
  • SWITCHOVER_NOT_READY: デプロイはプロビジョニングされていますが、切り替えを開始できません。これは、論理レプリケーションが中断、一時停止、停止された場合、または基盤となるノードエラーが発生した場合に発生します。Cloud SQL は、このステータスを設定するときにレプリケーションの遅延を評価しません。切り替えを試みる前に、errorDetail を調べてエラーを解決します。
  • SWITCHOVER_IN_PROGRESS: スイッチオーバー コマンドがアクティブに実行されています。Cloud SQL は接続エンドポイントを入れ替え、緑を本番環境の読み取り / 書き込みインスタンスに変換しています。
  • SWITCHOVER_COMPLETED: スイッチオーバーが正常に完了しました。緑色のインスタンスは、読み取りと書き込みのトラフィックを処理するアクティブな本番環境データベース インスタンスになり、青色のインスタンスは、デプロイを削除するまでスタンドアロンの読み取り / 書き込みインスタンスとして保持されます。

切り替え前のベスト プラクティス

  • トラフィックの少ない時間帯にスケジュールを設定する: ダウンタイムは最小限(通常は数秒)ですが、書き込みアクティビティが少ない期間(ピーク時間以外の時間帯や、秒間クエリ数(QPS)が最も少ないメンテナンスの時間枠など)に切り替えを開始します。これにより、レプリケーションの遅延が最小限に抑えられ、トランザクションがキャンセルされるリスクが軽減されます。
  • レプリケーション ラグを確認する: 切り替えを開始する前に、レプリケーション ラグが最小限であることを確認します。Blue/Green デプロイの説明にはレプリケーション ラグが表示されず、Cloud SQL は切り替えオペレーションの前にレプリケーション ラグをチェックしません。ただし、ワークフローの実行中に、レプリケーション ラグが大きすぎると、切り替えは失敗します。レプリケーション ラグをモニタリングするには、Cloud Monitoring の指標(replica_lag など)を確認するか、グリーン インスタンスでレプリケーション ステータスを直接検査します。詳細については、レプリケーション ラグをご覧ください。
  • アクティブなトランザクションを確認する: 切り替えを開始する前に、長時間実行されている DDL オペレーションまたはバッチ書き込みが完了していることを確認します。

スイッチオーバーを開始する

Google Cloud コンソール、gcloud CLI、または Cloud SQL Admin API を使用して、切り替えオペレーションを開始します。

コンソール

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Blue Green Deployment Status] カードで、[詳細] をクリックして [Deployment の概要] ページを開きます。
  4. [デプロイの切り替え] をクリックします。
  5. [インスタンス設定の違い] ダイアログで、ソース インスタンスとターゲット インスタンスの設定の違いを確認し、[続行] をクリックして切り替えを開始します。

gcloud

blue-green-deployments switchover コマンドを実行します。

gcloud beta sql blue-green-deployments switchover DEPLOYMENT_NAME \
  --region=REGION \
  --async

切り替えオペレーションは、完了するまでに数分かかることがあります。オペレーションに予想より時間がかかっていることを示すメッセージが表示される場合があります。このメッセージは無視するか、gcloud sql operations wait コマンドを実行してメッセージを閉じ、オペレーションが完了するまで待機します。

gcloud sql operations wait OPERATION_ID

切り替えオペレーションのステータスを確認するには、gcloud sql operations describe コマンドを実行します。

gcloud sql operations describe OPERATION_ID

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

  • DEPLOYMENT_NAME: ブルー / グリーン デプロイの名前。
  • REGION: デプロイが作成された Google Cloud リージョン。
  • OPERATION_ID: スイッチオーバー オペレーションの ID。

REST v1

POST リクエストを blueGreenDeployments.switchover メソッドに送信します。

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments/DEPLOYMENT_NAME:switchover

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • REGION: デプロイが作成された Google Cloud リージョン。
  • DEPLOYMENT_NAME: ブルー / グリーン デプロイの名前。

REST v1beta4

POST リクエストを blueGreenDeployments.switchover メソッドに送信します。

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments/DEPLOYMENT_NAME:switchover

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • REGION: デプロイが作成された Google Cloud リージョン。
  • DEPLOYMENT_NAME: ブルー / グリーン デプロイの名前。

切り替え後のモニタリング

切り替えが完了したら、次の操作を行います。

  1. アプリケーションが正常に再接続され、本番環境データベースのオペレーションが再開されることを確認します。
  2. 新しい本番環境インスタンスで、クエリ スループット、エラーログ、レプリケーションのステータスをモニタリングします。
  3. アップグレード後の最初の検証期間中は、青色のスタンドアロン インスタンスをそのままにしておきます。安定性を確認したら、デプロイを削除します。詳細については、Blue/Green デプロイを削除するをご覧ください。

次のステップ