Blue/Green デプロイを作成してステージングする

このドキュメントでは、Cloud SQL のブルー / グリーン デプロイを作成してステージングし、メジャー バージョンのアップグレードまたは構成の変更を行う方法について説明します。

始める前に

Blue/Green デプロイを作成してステージングするには、必要なロールが付与されており、ソース インスタンスがデプロイの前提条件を満たしていることを確認します。

必要なロールと権限

ブルー / グリーン デプロイを作成してステージングするために必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

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

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

  • cloudsql.blueGreenDeployments.create
  • cloudsql.blueGreenDeployments.get
  • cloudsql.instances.get
  • cloudsql.instances.create
  • cloudsql.operations.get

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

インスタンスの前提条件

ブルー / グリーン デプロイを作成する前に、本番環境(ブルー)インスタンスが次の要件を満たしていることを確認します。

  1. データベース エンジンとバージョン: インスタンスで Cloud SQL for MySQL バージョン 5.7、8.0、または 8.4 を実行する必要があります。バージョン 8.0.18 はサポートされていません。メジャー バージョン アップグレードの場合、バージョン 8.0 から 8.4 にアップグレードできます。
  2. バイナリ ロギングと自動バックアップ: 青色のインスタンスでバイナリ ロギングと自動バックアップを有効にして、緑色の環境への継続的な論理レプリケーションを確立する必要があります。
  3. インスタンスのステータス: 青色のインスタンスは、進行中のオペレーションや競合するメンテナンスの時間枠がない RUNNING 状態である必要があります。
  4. サポートされていない機能: インスタンスで、Blue/Green デプロイでサポートされていない機能(次を含む)が使用されていないことを確認します。

  5. 最新のメンテナンス バージョン: Blue/Green デプロイを作成する前に、インスタンスで最新のメンテナンス バージョンを実行する必要があります。詳細については、セルフサービス メンテナンスをご覧ください。

  6. ネットワーク アーキテクチャ: インスタンスは新しいネットワーク アーキテクチャを使用する必要があります。以前のネットワーク アーキテクチャを使用するインスタンスはサポートされていません。

デプロイの作成をトリガーすると、Cloud SQL は一連の自動事前チェックを自動的に実行して、レプリケーションの互換性とフラグを検証します。メジャー バージョンのアップグレードの場合、Cloud SQL はソース インスタンスでメジャー バージョンのアップグレード事前チェック API も実行し、ワークフローを続行する前にアップグレードの準備状況を検証します。事前チェックに失敗すると、デプロイの作成が停止し、オペレーション ステータスでエラーが返されます。

Blue/Green デプロイを作成する

メジャー バージョンのアップグレードを行う場合はインテントあり、ハードウェアまたはフラグの更新をステージングする場合はインテントなしで、Blue/Green デプロイを作成できます。

コンソール

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [構成] セクションで、[ブルー / グリーン デプロイを作成] をクリックします。
  4. [ブルー / グリーン デプロイを作成] ページの [デプロイ情報] セクションで、[デプロイ名] フィールドにデプロイの一意の名前を入力します。
  5. [デプロイのユースケース] リストで、次のいずれかのオプションを選択します。
    • オプション A(メジャー バージョンのアップグレード): 切り替え前にグリーン インスタンスでメジャー バージョンのアップグレードをステージングしてテストするには、[メジャー バージョンのアップグレード] を選択します。[ターゲット データベース バージョン] リストで、ターゲット データベース バージョン(MySQL 8.4 など)を選択します。

      インテントを使用してデプロイを作成すると、Cloud SQL は、オペレーションの一部として、グリーン インスタンスを作成する前にメジャー バージョンのアップグレードの事前チェックを自動的に実行します。または、デプロイを作成する前にメジャー バージョン アップグレードの事前チェックを実行して、アップグレードの障害となるものを特定することをおすすめします。

    • オプション B(デフォルト): 構成またはハードウェアの変更をテストするために、ソース インスタンスと同じデータベース バージョンでグリーン ステージング環境を作成するには、[デフォルト] を選択します。
  6. [作成] をクリックします。

gcloud

gcloud を使用して Blue/Green デプロイを作成するには、blue-green-deployments create コマンドを実行します。

オプション A: 意図して作成する(メジャー バージョン アップグレード)

インテントを使用してデプロイを作成すると、Cloud SQL は、オペレーションの一部としてメジャー バージョンのアップグレード事前チェックを自動的に実行してから、グリーン インスタンスを作成します。または、デプロイを作成する前に、ブルー インスタンスでメジャー バージョン アップグレードの事前チェックを実行して、アップグレードの障害となるものを特定することもできます。

gcloud beta sql blue-green-deployments create DEPLOYMENT_NAME \
  --source-instance=SOURCE_INSTANCE_ID \
  --target-database-version=TARGET_DATABASE_VERSION \
  --region=REGION \
  --async

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

  • DEPLOYMENT_NAME: デプロイの一意の名前。
  • SOURCE_INSTANCE_ID: ブルーのソース インスタンスの名前。
  • TARGET_DATABASE_VERSION: ターゲット バージョン(例: MYSQL_8_4)。
  • REGION: ブルー インスタンスの Google Cloud リージョン。

オプション B: インテントなしで作成する(ハードウェアまたは構成)

--target-database-version フラグを省略すると、Blue インスタンスと同じデータベース バージョンで Green 環境がプロビジョニングされます。

gcloud beta sql blue-green-deployments create DEPLOYMENT_NAME \
  --source-instance=SOURCE_INSTANCE_ID \
  --region=REGION \
  --async

特にメジャー バージョンのアップグレードを行う場合、Blue/Green デプロイの作成が完了するまでに数分かかります。オペレーションに予想より時間がかかっていることを示すメッセージが表示される場合があります。このメッセージは無視するか、gcloud sql operations wait コマンドを実行してメッセージを閉じ、オペレーションが完了するまで待ちます。

gcloud sql operations wait OPERATION_ID

OPERATION_ID は、コマンドから返されたオペレーション ID またはメッセージに表示されたオペレーション ID に置き換えます。

REST v1

Cloud SQL Admin API を使用してブルー / グリーン デプロイを作成するには、blueGreenDeployments.create メソッドに POST リクエストを送信します。

オプション A: 意図して作成する(メジャー バージョン アップグレード)

インテントを使用してデプロイを作成すると、Cloud SQL は、オペレーションの一部としてメジャー バージョンのアップグレード事前チェックを自動的に実行してから、グリーン インスタンスを作成します。または、デプロイを作成する前に、ブルー インスタンスでメジャー バージョン アップグレードの事前チェックを実行して、アップグレードの障害となるものを特定することもできます。

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments?blueGreenDeploymentId=DEPLOYMENT_NAME
{
  "sourceInstance": "SOURCE_INSTANCE_ID",
  "requestedConfig": {
    "databaseVersion": "TARGET_DATABASE_VERSION"
  }
}

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • REGION: ブルー インスタンスの Google Cloud リージョン。
  • DEPLOYMENT_NAME: デプロイの一意の名前。
  • SOURCE_INSTANCE_ID: ブルーのソース インスタンスの名前。
  • TARGET_DATABASE_VERSION: ターゲット データベース バージョン(例: MYSQL_8_4)。

オプション B: インテントなしで作成する(ハードウェアまたは構成)

requestedConfig フィールドを省略すると、Blue インスタンスと同じデータベース バージョンで Green 環境がプロビジョニングされます。

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments?blueGreenDeploymentId=DEPLOYMENT_NAME
{
  "sourceInstance": "SOURCE_INSTANCE_ID"
}

REST v1beta4

Cloud SQL Admin API を使用してブルー / グリーン デプロイを作成するには、blueGreenDeployments.create メソッドに POST リクエストを送信します。

オプション A: 意図して作成する(メジャー バージョン アップグレード)

インテントを使用してデプロイを作成すると、Cloud SQL は、オペレーションの一部としてメジャー バージョンのアップグレード事前チェックを自動的に実行してから、グリーン インスタンスを作成します。または、デプロイを作成する前に、ブルー インスタンスでメジャー バージョン アップグレードの事前チェックを実行して、アップグレードの障害となるものを特定することもできます。

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments?blueGreenDeploymentId=DEPLOYMENT_NAME
{
  "sourceInstance": "SOURCE_INSTANCE_ID",
  "requestedConfig": {
    "databaseVersion": "TARGET_DATABASE_VERSION"
  }
}

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • REGION: ブルー インスタンスの Google Cloud リージョン。
  • DEPLOYMENT_NAME: デプロイの一意の名前。
  • SOURCE_INSTANCE_ID: ブルーのソース インスタンスの名前。
  • TARGET_DATABASE_VERSION: ターゲット データベース バージョン(例: MYSQL_8_4)。

オプション B: インテントなしで作成する(ハードウェアまたは構成)

requestedConfig フィールドを省略すると、Blue インスタンスと同じデータベース バージョンで Green 環境がプロビジョニングされます。

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/
  locations/REGION/
  blueGreenDeployments?blueGreenDeploymentId=DEPLOYMENT_NAME
{
  "sourceInstance": "SOURCE_INSTANCE_ID"
}

デプロイ ステータスをモニタリングする

作成は長時間実行オペレーション(LRO)です。ステージング中、Cloud SQL はグリーン インスタンスをプロビジョニングし、アップグレード(メジャー バージョンのアップグレードがリクエストされた場合)して、継続的な論理レプリケーションを開始します。

Blue/Green デプロイの進行状況とステータスを確認します。

コンソール

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Blue/Green デプロイのステータス] カードを見つけて、デプロイのステータスを確認します。
  4. プロビジョニング タスクの詳細と進行状況を表示するには、[詳細] をクリックして [デプロイの概要] ページを開きます。

gcloud

gcloud を使用して Blue/Green デプロイの進行状況とステータスを確認するには、blue-green-deployments describe コマンドを実行します。

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

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

  • DEPLOYMENT_NAME: Blue/Green デプロイの名前。
  • REGION: デプロイが作成された Google Cloud リージョン。

作成オペレーションが完了するまで待機するには、gcloud sql operations wait コマンドを実行します。

gcloud sql operations wait OPERATION_ID

OPERATION_ID は、作成オペレーションの ID に置き換えます。

REST v1

Cloud SQL Admin API を使用してブルー / グリーン デプロイの進行状況とステータスを確認するには、blueGreenDeployments.get メソッドに GET リクエストを送信します。

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

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

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

REST v1beta4

Cloud SQL Admin API を使用してブルー / グリーン デプロイの進行状況とステータスを確認するには、blueGreenDeployments.get メソッドに GET リクエストを送信します。

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

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

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

コマンド出力または Google Cloud コンソールで、state フィールドをモニタリングして、デプロイのライフサイクルを追跡します。

  • PROVISIONING: 緑色のインスタンスが作成され、アップグレード(リクエストされた場合)され、継続的論理レプリケーションに接続されています。
  • SWITCHOVER_READY: 初期レプリケーションが完了し、継続的な論理レプリケーションがアクティブです。デプロイは、検証、テスト、切り替えの準備が整っています。
  • SWITCHOVER_NOT_READY: デプロイはプロビジョニングされていますが、切り替えを開始できません(レプリケーションが中断された場合や、errorDetail で問題が報告された場合など)。

デプロイのライフサイクル フェーズの詳細については、デプロイのライフサイクルと状態をご覧ください。

デプロイ状態が SWITCHOVER_READY に変わるまで待ってから、デプロイの説明、アプリケーション ワークロードの検証、スイッチオーバーの開始に進みます。

次のステップ