代替ゾーンで VM を修復する

このドキュメントでは、リージョン マネージド インスタンス グループ(MIG)が元のゾーンで VM を修復できない場合に、代替ゾーンで仮想マシン(VM)インスタンスを修復できるようにする方法について説明します。MIG での修復の詳細については、高可用性のための VM の修復についてをご覧ください。

リージョン MIG を作成するときに、MIG が VM を分散する 1 つ以上のゾーンを選択します。デフォルトでは、MIG 内の VM に障害が発生した場合、MIG は元のゾーンでその VM の修復を試みます。必要に応じて、MIG が他の選択したゾーンのいずれかで VM を修復できるようにすることもできます。これは、MIG が元のゾーンで VM を修復できない場合に便利です。MIG は、使用可能な容量と割り当てに基づいて代替ゾーンを選択します。

制限事項

代替ゾーンの VM を修復するようにリージョン MIG を構成する場合、次の制限が適用されます。

始める前に

  • まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    2. Set a default region and zone.

    Terraform

    ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    詳細については Set up authentication for a local development environment をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

代替ゾーンでの修復を許可する

MIG が代替ゾーンで VM を修復できるようにするには、次のいずれかのオプションを選択します。

コンソール

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

    [インスタンス グループ] に移動

  2. MIG がすでにある場合は、次の操作を行います。

    1. MIG の名前をクリックします。
    2. [編集] をクリックします。
  3. MIG がない場合は、次の操作を行います。

    1. [インスタンス グループを作成] をクリックします。
    2. 名前を入力します。
    3. インスタンス テンプレートを選択します。
    4. [ロケーション] セクションで、[複数のゾーン] を選択し、リージョンとゾーンを選択します。
    5. [ターゲット分配形態] プルダウンで、[バランス] または [任意] を選択します。

      • [バランス] を選択した場合は、表示されたダイアログで [インスタンスの再分配を無効化] をクリックします。

      • [任意] を選択する場合は、まず自動スケーリング構成を削除する必要があります。自動スケーリングを削除するには、[自動スケーリング モード] プルダウンで [自動スケーリングの構成を削除] をクリックします。

  4. [VM インスタンスのライフサイクル] セクションで、次のフィールドが次のように設定されていることを確認します。

    1. [障害発生時のデフォルトのアクション] リストが [インスタンスを修復] に設定されています。

    2. [VM インスタンス修復中の更新] が [インスタンス構成を更新する] に設定されている。

    3. [VM インスタンス修復中のゾーンの変更] セクションで、[代替ゾーンでの VM の修復を許可する] チェックボックスをオンにします。

  5. その他の設定では、デフォルト値を使用することも、フィールドを変更することもできます。

  6. 終了したら、[保存](既存の MIG の場合)または [作成](新しい MIG の場合)をクリックします。

gcloud

代替ゾーンで VM を修復するように既存の MIG を構成するには、ベータ版の update コマンドを使用します。

gcloud beta compute instance-groups managed update MIG_NAME \
    --on-repair-allow-changing-zone=YES \
    --force-update-on-repair \
    --region=REGION

代替ゾーンで VM を修復できる MIG を作成するには、ベータ版の create コマンドを使用します。

gcloud beta compute instance-groups managed create MIG_NAME \
    --template=INSTANCE_TEMPLATE_URL \
    --size=SIZE \
    --zones=ZONES \
    --target-distribution-shape=SHAPE \
    --instance-redistribution-type=none \
    --on-repair-allow-changing-zone=YES \
    --force-update-on-repair

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

  • MIG_NAME: MIG の名前。
  • INSTANCE_TEMPLATE_URL: MIG で VM の作成に使用するインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。
    • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID
  • SIZE: MIG のターゲット サイズ。
  • ZONES: MIG に VM を作成するリージョン内のゾーンのリスト。
  • SHAPE: ターゲット分配形態。この値は balanced または any のいずれかになります。
  • REGION: MIG が配置されているリージョン。

Terraform

MIG 内の各 VM に必要なマシンタイプ、ブートディスク イメージ、ネットワーク、その他の VM プロパティを指定するインスタンス テンプレートをまだ作成していない場合は、インスタンス テンプレートを作成します。

代替ゾーンで VM を修復できる MIG を作成するには、google_compute_region_instance_group_manager リソースを使用します。

resource "google_compute_region_instance_group_manager" "default" {
  provider           = google-beta
  name               = "example-rmig"
  base_instance_name = "example-rmig-instance"
  region             = "us-central1"

  target_size                      = 3
  distribution_policy_target_shape = "BALANCED"

  version {
    instance_template = google_compute_instance_template.default.id
  }

  instance_lifecycle_policy {
    default_action_on_failure = "REPAIR"
    force_update_on_repair    = "YES"
    on_repair {
      allow_changing_zone = "YES"
    }
  }

  update_policy {
    instance_redistribution_type = "NONE"
    type                         = "OPPORTUNISTIC"
    minimal_action               = "REPLACE"
    max_surge_fixed              = 0
    max_unavailable_fixed        = 6
  }
}

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

REST

代替ゾーンで VM を修復するように既存の MIG を構成するには、ベータ版の regionInstanceGroupManagers.patch メソッドを使用します。

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
    "instanceLifecyclePolicy": {
      "onRepair": {
        "allowChangingZone": "YES"
      },
      "forceUpdateOnRepair": "YES"
    }
}

代替ゾーンで VM を修復できる MIG を作成するには、ベータ版の regionInstanceGroupManagers.insert メソッドを使用します。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "name": "MIG_NAME",
  "instanceTemplate": "INSTANCE_TEMPLATE_URL",
  "targetSize": SIZE,
  "distributionPolicy": {
    "targetShape": "SHAPE"
  }
  "updatePolicy": {
    "instanceRedistributionType": none
  }
  "instanceLifecyclePolicy": {
    "forceUpdateOnRepair": "YES",
    "onRepair": {
      "allowChangingZone": "YES"
    }
  }
}

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

  • PROJECT_ID: 実際のプロジェクト ID
  • REGION: MIG が配置されているリージョン。
  • MIG_NAME: MIG の名前。
  • INSTANCE_TEMPLATE_URL: MIG で VM の作成に使用するインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。
    • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID
  • SIZE: MIG のターゲット サイズ。
  • SHAPE: ターゲット分配形態。この値は BALANCED または ANY のいずれかになります。

代替ゾーンでの修復を禁止する

代替ゾーンで VM を修復するように MIG を構成した場合は、MIG が元のゾーンで VM を修復するデフォルト設定に戻すことができます。

代替ゾーンでの修復を禁止するには、次のいずれかのオプションを選択します。

コンソール

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

    [インスタンス グループ] に移動

  2. MIG の名前をクリックします。

  3. [編集] をクリックします。

  4. [VM インスタンスのライフサイクル] セクションに移動します。

  5. [VM インスタンス修復中のゾーンの変更] セクションで、[代替ゾーンでの VM の修復を許可する] チェックボックスをオフにします。

  6. [保存] をクリックします。

gcloud

代替ゾーンで修復を禁止するには、ベータ版の update コマンドを使用します。

gcloud beta compute instance-groups managed update MIG_NAME \
    --on-repair-allow-changing-zone=NO \
    --region=REGION

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

  • MIG_NAME: MIG の名前。
  • REGION: MIG が配置されているリージョン。

REST

代替ゾーンでの修復を禁止するには、ベータ版の regionInstanceGroupManagers.patch メソッドを使用します。

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
    "instanceLifecyclePolicy": {
      "onRepair": {
        "allowChangingZone": "NO"
      }
    }
}

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

  • PROJECT_ID: 実際のプロジェクト ID
  • REGION: MIG が配置されているリージョン。
  • MIG_NAME: MIG の名前。

次のステップ