MIG でのステートフル永続ディスクの構成


永続ディスクをステートフルに構成すると、ディスクの状態を維持しながら、VM インスタンスの自動修復と自動更新を利用できます。

インスタンス テンプレートで定義されたディスクをマネージド インスタンス グループ(MIG)のすべてのインスタンスでステートフルに構成するには、そのディスクのデバイス名を MIG のステートフル ポリシーに追加します。

また、インスタンスごとの構成を設定することで、MIG のインスタンスにステートフル永続ディスクを個別に構成することも可能です。これらのディスクは、インスタンス テンプレートで定義する必要はありません。

準備

  • ステートフル MIG を使用する場合ステートフル MIG の仕組みを確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    Terraform

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

    詳細については、 ローカル開発環境の認証の設定 をご覧ください。

    REST

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

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

制限事項

ステートフル ディスクを使用した MIG には次の制限があります。

ステートフル構成を使用した MIG (ステートフル MIG )には、次の制限があります。

  • MIG にステートフルな構成がある場合は、自動スケーリングを使用できません。
  • 自動ローリング アップデートを使用する場合は、置換メソッドRECREATE に設定する必要があります。
  • ステートフル リージョン MIG の場合は、プロアクティブな再配布を無効にする(再配布タイプを NONE に設定する)必要があります。これは、複数ゾーンにまたがる自動再配布によってステーフル インスタンスが削除されないようにするためです。
  • すべてのインスタンスの構成を使用してインスタンス テンプレートのプロパティをオーバーライドする場合、インスタンスごとの構成とグループのすべてのインスタンス構成で、同時にこれらのプロパティを指定することはできません。

  • ステートフル リージョン MIG は、ゾーン間のフェイルオーバーを自動的にオーケストレートしません。リージョン MIG を使用する場合、冗長レプリカを複数のゾーンにデプロイし、アプリケーションのデータ レプリケーション機能を使用して、ゾーン障害に対する復元性があるステートフル アプリケーションを作成できます。

ステートフル永続ディスクを使用する場合

ステートフル永続ディスクを使用すると、ディスク上のデータを保持しながら、VM の自動修復自動更新を利用できます。詳細については、ステートフル MIG のユースケースをご覧ください。

ステートフル ディスクを構成した場合、VM インスタンスの自動修復、更新、再作成でこれらのディスクは保持されます。ただし、元のイメージからステートフル ディスクを再作成することはできません。また、新しいイメージに更新することもできません。

ブートディスクはステートレスにしておくことをおすすめします。

ブートディスクをステートレスにすることで次の利点があります。

  • 元のイメージからブートディスクを再作成することで、破損したブートディスクを修復できます。自動修復では、このような修復が自動的に行われます。
  • ブートディスクを新しいバージョンとセキュリティ パッチで最新のイメージに更新できます。

詳細については、自動修復更新による保持状態の処理方法をご覧ください。

MIG 内のすべての VM にステートフル永続ディスクを構成する

インスタンス テンプレートで定義されたディスクをステートフルに構成するには、ディスクのデバイス名を MIG のステートフル ポリシーに追加します。MIG は、すべての VM インスタンス(新たに作成されるインスタンスを含む)でそのデバイス名のディスクをステートフルとして扱います。

MIG 作成時にステートフル ディスクを構成する

コンソール

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

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

  2. プロジェクトを選択し、[続行] をクリックします。

  3. [インスタンス グループの作成] をクリックします。

  4. [新しいマネージド インスタンス グループ(ステートフル)] を選択します。

  5. インスタンス グループの [名前] を指定します。

  6. インスタンス テンプレートを選択します。使用できるテンプレートがない場合は、インスタンス テンプレートを作成します。

  7. [インスタンス数] で、インスタンス グループのインスタンス数を指定します。

  8. [ステートフル構成] セクションに、インスタンス テンプレートで指定されたディスクが表示されます。ディスクをクリックして、ステートフル構成を編集します。

    1. [ステートフル] で [はい] を選択します。
    2. [永続インスタンスの削除時] プルダウンから、VM インスタンスの削除時にステートフル ディスクに対して行うアクションを選択します。使用できるオプションは次のとおりです。

      • ディスクの切断: (デフォルト) VM の削除時にディスクを削除せず、ディスクを切断します。
      • ディスクの削除: VM がインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、マネージド インスタンスが手動で削除された場合や、グループサイズが縮小された場合にディスクを削除します。
    3. ステートフル構成が完了したら、[完了] をクリックします。

  9. [作成] をクリックします。

gcloud

MIG の作成時にステートフルにするディスクをインスタンス テンプレートから指定するには、gcloud compute instance-groups managed create コマンド--stateful-disk フラグを使用します。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

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

  • INSTANCE_GROUP_NAME: 作成するマネージド インスタンス グループの名前。
  • INSTANCE_TEMPLATE: インスタンスの作成時に使用されるインスタンス テンプレートの名前。
  • SIZE: このグループで最初に必要な VM の数。
  • DEVICE_NAME: インスタンス テンプレートで指定されたディスクのデバイス名。
  • DELETE_RULE: VM が削除されたときにステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。ディスクは削除しません。代わりに、VM の削除時にディスクを切断します。
    • on-permanent-instance-deletion: VM インスタンスがインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、マネージド インスタンスが手動で削除された場合や、グループサイズの変更でインスタンスが削除された場合にディスクを削除します。

    削除ルールの値に関係なく、VM の自動修復、更新、再作成の場合、ステートフル ディスクは常に保持されます。

12 個のシャードを持つデータベースをデプロイします。各シャードには、オペレーティング システムとデータベース バイナリを含むステートレス ブートディスクと、ステートフル データディスクがあります。次の操作を行います。

  1. イメージ img-example-db-v01 をベースにして、ステートレス ブートディスクを含むインスタンス テンプレートを作成します。このイメージには OS とデータベースがプリインストールされ、ステートフル データディスクが含まれています。

    gcloud compute instance-templates create example-database-template-v01 \
        --image img-example-db-v01 \
        --create-disk device-name=data-disk,mode=rw,image=empty10GBext4
    

    --create-disk フラグを使用して、次のことを指定します。

    1. あらかじめ用意された空の ext4 イメージから、VM インスタンスごとに 10 GB のディスクを新規に作成する。
    2. デバイス名 data-disk を使用して、ディスクを読み取り / 書き込みモードで VM に接続する。
  2. インスタンス テンプレートから MIG を作成し、データディスクをステートフルとして定義します。

    gcloud compute instance-groups managed create example-database-group \
      --template example-database-template-v01 \
      --base-instance-name shard \
      --size 12 \
      --stateful-disk device-name=data-disk,auto-delete=on-permanent-instance-deletion
    

    デバイス名 data-disk はインスタンス テンプレートから取得されます。データディスクは、VM が完全に削除される(インスタンスが手動で削除されるか、グループサイズが手動で縮小される)際に VM インスタンスと一緒に削除されるように構成されます。自動修復、更新、VM の再作成でデータディスクは保持されます。

  3. データディスクがステートフル ポリシーで構成されていることを確認します。

    gcloud compute instance-groups managed describe example-database-group
    
    
    baseInstanceName: shard
    ...
    name: example-database-group
    ...
    statefulPolicy:
      preservedState:
        disks:
          data-disk:
            autoDelete: ON_PERMANENT_INSTANCE_DELETION
    ...
    

    ステートフル ポリシーで、デバイス名 data-disk のディスクがステートフルとして宣言され、このディスクを永続 VM の削除時に削除するルールが定義されています。

Terraform

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

次のサンプルでは、ステートフル ディスクを使用してゾーン MIG を作成します。MIG の作成時に、ステートフルにするディスクをインスタンス テンプレートから指定するには、stateful_disk ブロックを含めます。サンプルで使用されているリソースの詳細については、google_compute_instance_group_manager リソースをご覧ください。リージョン MIG を作成するには、google_compute_region_instance_group_manager リソースを使用します。

resource "google_compute_instance_group_manager" "default" {
  name               = "example-database-group"
  base_instance_name = "shard"
  target_size        = 12
  zone               = "us-central1-f"
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  stateful_disk {
    device_name = "data-disk"
    delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
  }
}

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

REST

MIG の作成時にステートフルにするインスタンス テンプレートのディスクを指定するには、instanceGroupManagers.insert メソッドのリクエスト本文の statefulPolicy フィールドにディスクを指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers

{
  "name": "NAME",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/TEMPLATE"
    }
  ],
  "targetSize": SIZE,
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

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

  • PROJECT: リクエストのプロジェクト ID。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: 作成する MIG の名前。
  • TEMPLATE: インスタンスの作成時に使用されるインスタンス テンプレートの名前。
  • SIZE: このグループで最初に必要なインスタンスの数。
  • DEVICE_NAME: インスタンス テンプレートで指定されたディスクのデバイス名。
  • DELETE_RULE: VM インスタンスの削除時にステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。VM の削除時にディスクを削除せず、ディスクを切断します。
    • on_permanent_instance_deletion: VM がインスタンス グループから完全に削除される(マネージド インスタンスが手動で削除される場合や、グループサイズが縮小される場合など)ときに、ステートフル ディスクを削除します。

12 個のシャードを持つデータベースをデプロイします。各シャードには、オペレーティング システムとデータベース バイナリを含むステートレス ブートディスクと、ステートフル データディスクがあります。次の手順を行います。

  1. instanceTemplates.insert メソッドを使用して、イメージ img-example-db-v01 に基づくステートレス ブートディスク、プリインストールされた OS とデータベース、ステートフル データディスクを備えるインスタンス テンプレートを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates
    
    {
      "name": "example-database-template-v01",
      "properties": {
        "machineType":"e2-standard-2",
        "disks": [
          {
            "boot": true,
            "deviceName": "boot-disk",
            "initializeParams": {
              "sourceImage": "projects/example-project/global/images/mg-example-db-v01"
            }
          },
          {
            "deviceName": "data-disk",
            "mode": "READ_WRITE",
            "initializeParams": {
              "sourceImage": "projects/example-project/global/images/empty10GBext4"
            }
          }
        ],
        "networkInterfaces": [
          {
            "network": "global/networks/default"
          }
        ]
      }
    }
    

    インスタンス テンプレートのデータディスクは、デバイス名が data-disk で、あらかじめ用意された空の ext4 イメージから作成され、読み取り / 書き込みモードでアタッチされるように構成されます。

  2. instanceGroupManagers.insert メソッドを使用して、インスタンス テンプレートから MIG を作成し、データディスクをステートフルとして定義します。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers
    
    {
      "name": "example-database-group",
      "baseInstanceName": "shard",
      "versions": [
        {
          "instanceTemplate": "global/instanceTemplates/example-database-template-v01"
        }
      ],
      "targetSize": 12,
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
          }
        }
      }
    }
    

    MIG は 12 個のインスタンスを作成し、各インスタンスには次のプロパティを持つ 1 つのディスクが備わっています。

    • デバイス名 data-disk。インスタンス テンプレートから取得した名前です。
    • VM の削除時(インスタンスが手動で削除されたか、グループサイズが手動で縮小された場合)にデータディスクを削除する削除ルール。
    • 各マネージド インスタンスのポリシー(preservedStateFromPolicy)の状態を保持するエントリ。これにより、自動修復、更新、インスタンスの再作成時にデータディスクが保持されます。
  3. instanceGroupManagers.get メソッドを使用して、データディスクが新しい instanceGroupManagers リソースのステートフル ポリシーに構成されていることを確認します。

    GET https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
    
    
    {
      "name": "example-database-group",
      "baseInstanceName": "shard",
      ...
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
          }
        }
      }
      ...
    }
    

    ステートフル ポリシーで、data-disk というデバイス名のディスクが、インスタンスの完全な削除時にディスクを削除するルールでステートフルと宣言されています。

既存の MIG にあるディスクのステートフル構成を設定または更新する

ステートレス MIG(ステートフル構成のない MIG)でステートフル アプリケーションを実行する場合は、この MIG のすべてのインスタンスで、インスタンス テンプレートに定義された既存のディスクをステートフルに構成できます。これにより、インスタンスの再作成、自動修復、更新のオペレーションや削除オペレーションでディスクを保持できます。

次の操作を実施できます。

  • インスタンス テンプレートで定義されるディスクを既存の MIG のステートフル ポリシーに追加し、ステートフルと宣言します。これにより、MIG 内の既存のインスタンスと今後作成されるインスタンスで、指定されたデバイス名のディスクはステートフルとマークされます。
  • ステートフル ポリシーを更新して、ディスクのステートフル構成を変更します。

MIG は、ステートフル ポリシーで更新された構成をすべてのインスタンスに自動的かつ非同期的に適用します。ステートフル ポリシーのディスク構成を更新しても、実行中の VM は中断されません。詳細については、ステートフル ポリシーの更新の適用をご覧ください。

リージョン MIG の場合、ステートフル ディスクを構成する前に、複数ゾーンにまたがるプロアクティブなインスタンスの再配布を無効にする必要があります。詳細については、リージョン グループによる保持状態の処理方法をご覧ください。

コンソール

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

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

  2. ディスクのステートフル構成を指定するインスタンス グループの名前をクリックします。

  3. [編集] をクリックして、マネージド インスタンス グループを変更します。

  4. [ステートフル構成] で、ステートフルにするディスクを開きます。

    1. [ステートフル] で [はい] を選択します。
    2. [永続インスタンスの削除時] プルダウンから、VM インスタンスの削除時にステートフル IP アドレスに対して行うアクションを選択します。

      • ディスクの切断: (デフォルト) VM の削除時にディスクを削除せず、ディスクを切断します。
      • ディスクの削除: VM がインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、マネージド インスタンスが手動で削除された場合や、グループサイズが縮小された場合にディスクを削除します。

    3. ステートフル構成を更新したら、[完了] をクリックします。

  5. [保存] をクリックして更新を完了します。

gcloud

インスタンス テンプレートでステートフルにするディスクを指定する場合、または既存の MIG のステートフル ディスク構成を更新する場合は、gcloud compute instance-groups managed update コマンドで 1 つまたは複数の --stateful-disk フラグを使用します。

gcloud compute instance-groups managed update NAME \
  --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

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

  • NAME: 更新するマネージド インスタンス グループの名前。
  • DEVICE_NAME: インスタンス テンプレートに指定されているディスクのデバイス名。
  • DELETE_RULE: VM インスタンスの削除時にステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。インスタンスの削除時にディスクを削除せず、ディスクを切断します。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、マネージド インスタンスが手動で削除された場合や、グループサイズが縮小された場合にディスクを削除します。

指定したデバイス名がステートフル ポリシーですでに構成されている場合、このコマンドは構成を更新します。

example-database- group という名前の MIG で、複数のシャードを持つデータベースを実行します。MIG の各 VM は、インスタンス テンプレートで定義されたデバイス名 data-disk の追加ディスクにシャードを保存します。MIG にはステートフル構成がなく、インスタンスの再作成、自動修復、更新時にデータディスクを保持する必要があります。また、VM の削除時にデータディスクが削除されないようにする必要があります。

  1. 次のコマンドを使用して MIG を更新し、データディスクをステートフルとして定義します。

    gcloud compute instance-groups managed update example-database-group \
      --stateful-disk device-name=data-disk,auto-delete=never
    

    これにより、MIG はすべてのインスタンスのデータディスクにステートフル ポリシー構成の更新を自動的かつ非同期で適用します。auto-delete ルールが never に設定されているため、データディスクは自動修復、更新、インスタンスの再作成時に保持され、インスタンスの削除時に切断されます。

  2. gcloud compute instance-groups managed describe example-database-group コマンドを実行して、データディスクがステートフル ポリシーで構成されていることを確認します。

REST

インスタンス テンプレートでステートフルにするディスクを指定する場合、または既存の MIG のステートフル ディスク構成を更新する場合は、instanceGroupManagers.patch メソッドを使用します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

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

  • PROJECT: リクエストのプロジェクト ID。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: 更新する MIG の名前。
  • DEVICE_NAME: インスタンス テンプレートに指定され、ステートフル構成を更新するディスクのデバイス名。
  • DELETE_RULE: VM インスタンスの削除時にステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。インスタンスの削除時にディスクを削除せず、ディスクを切断します。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、インスタンスが手動で削除された場合や、グループサイズが縮小された場合にディスクを削除します。

指定したデバイス名がステートフル ポリシーですでに構成されている場合、patch メソッドはその構成を更新します。

example-database- group という名前の MIG で、複数のシャードを持つデータベースを実行します。MIG の各 VM は、インスタンス テンプレートで定義されたデバイス名 data-disk の追加ディスクにシャードを保存します。MIG にはステートフル構成がなく、インスタンスの再作成、自動修復、更新時にデータディスクを保持する必要があります。また、VM の削除時にデータディスクが削除されないようにする必要があります。

  1. MIG にパッチを適用して、データディスクをステートフルとして定義します。

    PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
    
    {
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "NEVER" }
          }
        }
      }
    }
    

    MIG は、このステートフル構成をすべてのインスタンスのデータディスクに自動的かつ非同期的に適用します。データディスクは、自動修復、更新、インスタンスの再作成時に保持されます。autoDelete ルールが NEVER に設定されているため、インスタンスの削除時にデータディスクが切断されます。

  2. instanceGroupManagers.get メソッドによって返された instanceGroupManagers リソースを表示して、データディスクがステートフル ポリシーで構成されていることを確認します。

ステートフル永続ディスクをステートレスとして宣言する

ステートフル ディスクをステートレスとして扱う必要がある場合があります。例:

  • アプリを再構築してディスクから状態を移動する場合。
  • 誤ってステートフルとした構成ディスクを元に戻したい場合。

特定のデバイス名を持つすべてのディスクをステートレスとして宣言するには、ステートフル ポリシーからディスクの構成を削除します。

MIG は、すべてのインスタンスにステートフル ポリシーの変更を自動的かつ非同期で適用します。ステートフル ポリシーのディスク構成を更新しても、実行中の VM インスタンスは中断されません。

詳細については、ステートフル ポリシーの更新の適用をご覧ください。

コンソール

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

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

  2. ディスクのステートフル構成を削除するインスタンス グループの名前をクリックします。

  3. [編集] をクリックして、マネージド インスタンス グループを変更します。

  4. [ステートフル構成] で、ステートレスにするステートフル ディスクを開きます。

    1. [ステートフル] オプションを [いいえ] に変更します。
    2. [完了] をクリックします。
  5. 変更後、[保存] をクリックします。

gcloud

MIG のステートフル ポリシーでステートレスにするディスクを指定するには、gcloud compute instance-groups managed update コマンド--remove-stateful-disks フラグを使用します。

gcloud compute instance-groups managed update NAME \
  --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...]

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

  • NAME: 更新する MIG の名前。
  • DEVICE_NAME: ステートフル ポリシーから削除し、ステートレスとして扱うディスクのデバイス名。リストには 1 つまたは複数のデバイス名を指定できます。

example-legacy-group という名前の MIG で、複数のノードを持つレガシー アプリケーションを実行します。MIG の各 VM は、デバイス名が boot-disk のブートディスクにアプリケーション データを保存します。このディスクは、MIG のステートフル ポリシーでステートフルとして構成されています。アプリケーション データを追加のディスクに移動したので、ブートディスクをステートレスにし、新しいイメージの更新を簡単にできるようにします。

ブートディスクのステートフル構成を削除するには、マネージド インスタンス グループを更新します。

gcloud compute instance-groups managed update example-legacy-group \
  --remove-stateful-disks boot-disk

MIG は、グループ内のすべてのインスタンスのブートディスクについて、デバイス名が boot-disk のステートフル構成を自動的に削除します。ブートディスクはインスタンスに接続されたままですが、ステートフルではなくなります。インスタンスを再作成または更新する場合、またはインスタンスが自動修復される場合に、MIG はインスタンス テンプレートに指定されたイメージからブートディスクを再作成します。

REST

MIG のステートフル ポリシーでステートレスにするディスクを指定するには、instanceGroupManagers.patch メソッドを使用して、MIG のステートフル ポリシーから各ディスクの構成を削除します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": null,
        ...
      }
    }
  }
}

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

  • PROJECT: リクエストのプロジェクト ID。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: 更新する MIG の名前。
  • DEVICE_NAME: ステートフル ポリシーから削除するディスクのデバイス名。null 値を指定すると、そのディスクのステートフル構成が削除されます。削除するデバイス名を 1 つまたは複数指定できます。

example-legacy-group という名前の MIG で、複数のノードを持つレガシー アプリケーションを実行します。MIG の各 VM は、デバイス名が boot-disk のブートディスクにアプリケーション データを保存します。このディスクは、MIG のステートフル ポリシーでステートフルとして構成されています。アプリケーション データを追加のディスクに移動したので、ブートディスクをステートレスにし、新しいイメージの更新を簡単にできるようにします。

ブートディスクのステートフル構成を削除するには、マネージド インスタンス グループにパッチを適用します。

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "boot-disk": null
      }
    }
  }
}

MIG は、グループ内のすべてのインスタンスのブートディスクについて、デバイス名が boot-disk のステートフル構成を自動的に削除します。ブートディスクはインスタンスに接続されたままですが、ステートフルではなくなります。インスタンスを再作成または更新する場合、またはインスタンスが自動修復される場合に、MIG はインスタンス テンプレートに指定されたイメージからブートディスクを再作成します。

MIG からステートフル永続ディスクを削除する

たとえば、アプリケーションを再構築し、そのディスクから状態を削除した場合は、MIG のインスタンスからステートフル ディスクを完全に削除する必要があります。

MIG ではステートフル ディスクを削除できないため、次の手順を行う必要があります。

  1. ステートフル ポリシーからディスクのステートフル構成を削除します。これにより、指定したデバイス名のディスクがステートレスになります。
  2. ディスクを保持する場合は、VM からディスクを切断します。
  3. 指定されたデバイス名のディスクが定義されていない新しいインスタンス テンプレートをロールアウトします。

MIG で VM にステートフル永続ディスクを個別に構成する

MIG 内の特定の VM にステートフル永続ディスクを構成するには、その VM のインスタンスごとの構成にディスクのデバイス名を追加します。VM を更新してインスタンスごとの構成を適用し、有効にします。

次のような場合、MIG 内の特定の VM にステートフル永続ディスクを個別に構成すると便利です。

  • 既存のワークロード(既存のディスク)をスタンドアロン VM からステートフル MIG に移行し、自動修復と簡単な更新を利用する。
  • VM に個別に構成されたディスクのバックアップを復元する。
  • テスト、デバッグ、データのコピーを行うために、特定の VM に追加のステートフル ディスクを一時的にアタッチする。

MIG で新しい VM に既存のステートフル ディスクを追加する

MIG に手動で作成した新しいインスタンスに既存のステートフル ディスクを追加できます。これは、既存のスタンドアロン VM からステートフル MIG にステートフル アプリケーションを移行する場合に便利です。例:

  1. すべての VM インスタンスに共通の構成でインスタンス テンプレートを作成します。
  2. スタンドアロン インスタンスからデータディスクを切断し、これらのインスタンスを削除します。保持する必要がある状態が含まれている場合は、ブートディスクを切断することもできます。
  3. 前に作成したインスタンス テンプレートを使用して、空の MIG を作成します。
  4. 前の手順で使用した適切な名前と関連ディスクを使用して、MIG にインスタンスを作成します。リクエストに対して MIG は次のアクションを行います。

    1. 指定されたインスタンス名を使用して、インスタンス テンプレートから VM を作成します。
      • リージョン MIG の場合、ディスクが配置されているゾーンに VM を作成します。リージョン ディスクの場合、リージョン MIG により、ディスクのレプリカゾーンのいずれかに VM が作成されます。
    2. ディスクに指定されたステートフル構成でインスタンスごとの構成を作成します。
    3. 新しいインスタンスにディスクをアタッチします。

gcloud CLI または REST を使用して、MIG に特定のインスタンスを手動で作成するときに、既存のステートフル ディスクを追加します。MIG は VM の作成時に構成をすぐに適用します。

gcloud

カスタム名で VM を作成し、その VM に 1 つ以上の既存のステートフル ディスクをアタッチするには、1 つまたは複数の --stateful-disk フラグを指定して gcloud compute instance-groups managed create-instance コマンドを実行します。

gcloud compute instance-groups managed create-instance NAME \
  --instance VM_NAME \
  [--zone ZONE | --region REGION] \
  --stateful-disk device-name=DEVICE_NAME,source=DISK[,mode=MODE][,auto-delete=DELETE_RULE]

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

  • NAME: インスタンスを作成する必要がある MIG の名前。
  • VM_NAME: 作成する新しいインスタンスの名前。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
  • REGION: MIG が配置されているリージョン(リージョン MIG に適用)。
  • DEVICE_NAME: ディスクの接続時に使用するデバイス名。
  • DISK: 指定された DEVICE_NAME で接続する既存の永続ディスクの URI。ゾーンディスクの場合は projects/project-id/zones/zone/disks/disk-name、リージョン ディスクの場合は projects/project-id/regions/region/disks/disk-name という形式になります。
  • MODE: ディスクのモードを指定します。使用可能なオプションは次のとおりです。
    • ro: 読み取り専用。
    • rw: デフォルト。読み取り / 書き込み。
  • DELETE_RULE: VM インスタンスの削除時にステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。ディスクは削除しません。代わりに、VM の削除時にディスクを切断します。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除される(インスタンスが手動で削除される場合や、グループサイズが縮小される場合など)ときに、ステートフル ディスクを削除します。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成の場合、ステートフル ディスクは常に保持されます。

現在、db-instance という名前のスタンドアロン VM で実行され、db-data-disk-1 という名前のディスクにデータを保存しているデータベース サーバーの自動修復を行います。

自動修復を使用するステートフル MIG を作成し、MIG 内に同様の VM を作成します。新しいインスタンスに既存のデータディスク db-data-disk-1 をステートフル ディスクとして接続します。

  1. メンテナンスの時間枠内に VM db-instance を停止します。
  2. db-instance 構成を使用して、db-template という名前のインスタンス テンプレートを作成します。
  3. db-instance から db-data-disk-1 を切断し、db-instance を削除します。
  4. db-template から空の MIG example-database-mig を作成し、自動修復を構成します。
  5. 元の db-instance 名でマネージド インスタンスを作成し、db-data-disk-1 をステートフル ディスクとしてアタッチします。

    gcloud compute instance-groups managed create-instance example-database-mig \
      --instance db-instance \
      --zone us-east1-c \
      --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/db-data-disk-1,auto-delete=never
    

    このコマンドは、MIG に db-instance というインスタンスを作成し、対応するインスタンスごとの構成を作成して、db-data-disk-1 ステートフル ディスクを設定します。さらに、デバイス名として data-disk を使用して、新しい VM にディスクをアタッチします。

REST

instanceGroupManagers.createInstances メソッドを使用して、MIG に 1 つ以上のインスタンスを作成し、カスタム VM 名を設定し、これらのインスタンスに 1 つ以上の既存のステートフル ディスクをアタッチします。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances

{
  "instances": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      }
    },
    ...
  ]
}

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

  • PROJECT_ID: リクエストのプロジェクト ID。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: インスタンスを作成する MIG の名前。
  • VM_NAME: 作成するインスタンスの名前。
  • DEVICE_NAME: ディスクの接続時に使用するデバイス名。
  • DISK: 指定された DEVICE_NAME で接続する既存の永続ディスクの URI。ゾーンディスクの場合は projects/project-id/zones/zone/disks/disk-name、リージョン ディスクの場合は projects/project-id/regions/region/disks/disk-name の形式になります。
  • MODE: ディスクのモードを指定します。使用可能なオプションは次のとおりです。
    • READ_ONLY: 読み取り専用。
    • READ_WRITE: デフォルト。読み取り / 書き込み。
  • DELETE_RULE: VM が削除されたときにステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。VM の削除時にディスクを削除せず、ディスクを切断します。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除される(インスタンスが手動で削除される場合や、グループサイズが縮小される場合など)ときに、ステートフル ディスクを削除します。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成の場合、ステートフル ディスクは常に保持されます。

現在、db-instance という名前のスタンドアロン VM で実行され、db-data-disk-1 という名前のディスクにデータを保存しているデータベース サーバーの自動修復を行います。

自動修復を使用するステートフル MIG を作成し、MIG 内に同様のインスタンスを作成します。新しい VM に既存のデータディスク db-data-disk-1 をステートフル ディスクとして接続します。

  1. メンテナンスの時間枠内に VM db-instance を停止します。
  2. db-instance 構成を使用して、db-template という名前のインスタンス テンプレートを作成します。
  3. db-instance から db-data-disk-1 を切断し、db-instance を削除します。
  4. db-template から空の MIG example-database-mig を作成し、自動修復を構成します。
  5. 元の db-instance 名でインスタンスを作成し、db-data-disk-1 をステートフル ディスクとしてアタッチします。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/createInstances
    
    {
      "instances": [
        {
          "name": "db-instance",
          "preservedState" : {
            "disks": {
              "data-disk" : {
                "source": "projects/example-project/zones/us-east1-c/disks/db-data-disk-1",
                "mode": "READ_WRITE",
                "autoDelete": "never"
              }
            }
          }
        }
      ]
    }
    

    このメソッドは、MIG に db-instance というインスタンスを作成し、対応するインスタンスごとの構成を作成して、db-data-disk-1 ステートフル ディスクを設定します。さらに、デバイス名として data-disk を使用して、新しいインスタンスにディスクをアタッチします。

MIG で VM のステートフル ディスクを個別に追加、宣言、交換する

マネージド インスタンスのステートフル ディスクを個別に構成するには、関連付けられたインスタンスごとの構成でステートフル ディスク構成を追加または更新します。次に、インスタンスを更新して VM にインスタンスごとの構成を適用します。

ステートフル ディスクを個別に構成すると、次のタスクに役立ちます。

  • MIG の外部にあるステートフル ディスクを MIG の VM に追加する。
  • MIG 内の VM でステートレス ディスクをステートフルとして宣言する。
  • MIG 内の VM でステートフル ディスクを別のディスクに置き換える。

MIG の外部にあるステートフル ディスクを MIG の VM に追加する。MIG の外部にある任意のディスクをマネージド インスタンスにアタッチするには、関連付けられたインスタンスごとの構成にディスクのステートフル構成を追加します。構成を適用すると、MIG はディスクを自動的にインスタンスにアタッチし、ステートフルとして扱います。

ステートレスの永続ディスクをステートフルとして宣言する。VM に現在アタッチしているステートレス ディスクをステートフルとして宣言するには、このディスクのステートフル構成(デバイス名や URI など)を関連するインスタンスごとの構成に追加します。構成を適用すると、MIG はディスクをステートフルとして保持します。

ステートフル ディスクを別のディスクに置き換える。復元されたバックアップにアクセスする場合など、ステートフル ディスクを別のステートフル ディスクに置き換えると便利な場合があります。ディスクの URI を更新することで、インスタンスごとの構成で同じデバイス名を維持しながら、ステートフル ディスクを切り替えることができます。更新されたインスタンスごとの構成を適用すると、MIG は古いディスクを切断し、同じデバイス名の新しいディスクをアタッチします。更新の適用時に、実行中のインスタンスの継続、再起動、再作成のいずれかを選択します。ブートディスクを交換する場合は、少なくとも VM の再起動が必要になります。

gcloud

MIG で VM のステートフル ディスクを個別に構成するには、関連するインスタンスごとの構成でステートフル ディスク構成を追加または更新します。次に、インスタンスを更新して構成を適用します。

インスタンスにインスタンスごとの構成が存在しない場合は、gcloud compute instance-groups managed instance-configs create コマンドで 1 つまたは複数の --stateful-disk フラグを使用します。

gcloud compute instance-groups managed instance-configs create NAME \
--instance VM_NAME \
--stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \
[--no-update-instance | --update-instance] \
[--instance-update-minimal-action MINIMAL_ACTION]

インスタンスにインスタンスごとの構成が存在する場合は、gcloud compute instance-groups managed instance-configs update コマンドで 1 つまたは複数の --stateful-disk フラグを使用します。

--update-instance フラグ(デフォルト)を使用すると、インスタンスに変更がすぐに適用されます。--no-update-instance を使用すると、変更はすぐに適用されず、次にインスタンスを再作成または更新するときに適用されます。

gcloud compute instance-groups managed instance-configs update NAME \
--instance VM_NAME \
--stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \
[--no-update-instance | --update-instance] \
[--instance-update-minimal-action MINIMAL_ACTION]

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

  • NAME: マネージド インスタンス グループの名前。
  • VM_NAME: ステートフル ディスクを構成する VM インスタンスの名前。
  • DEVICE_NAME: ディスクのアタッチに使用されるデバイス名。
  • DISK: 指定された DEVICE_NAME でアタッチする既存の永続ディスクの URI。ゾーンディスクの場合は projects/project-id/zones/zone/disks/disk-name、リージョン ディスクの場合は projects/project-id/regions/region/disks/disk-name の形式になります。

    インスタンスごとの構成でデバイスがすでに定義されている場合、source=DISK サブフラグは省略できます。それ以外の場合は必須です。

    省略した場合、現在構成されているディスク URI は変更されません。

  • MODE: ディスクのモードを指定します。source を指定した場合にのみ、mode を指定できます。使用可能なオプションは次のとおりです。

    • ro: 読み取り専用。
    • rw: デフォルト。読み取り / 書き込み。

    省略した場合は、デフォルト値が新しいステートフル ディスク構成に設定されます。既存の構成では、値は変更されません。

  • DELETE_RULE: VM が削除されたときにステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。インスタンスの削除時にディスクを削除せず、ディスクを切断します。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、インスタンスが手動で削除された場合や、グループサイズが縮小された場合にディスクを削除します。

    省略した場合は、デフォルト値が新しいステートフル ディスク構成に設定されます。既存の構成では、値は変更されません。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成の場合、ステートフル ディスクは常に保持されます。

  • MINIMAL_ACTION: インスタンスごとの構成の更新をインスタンスに適用するときに、最低でも指定されたアクションを実行します。--update-instance フラグと一緒に使用する必要があります。値は次のいずれかにする必要があります。

    • none: アクションなし。
    • refresh: VM を停止せずに適用できる更新を適用します。
    • restart: VM を停止してから再起動します。
    • replace: VM を再作成します。

    省略した場合は、更新に必要な最も影響の少ない操作が使用されます。

現在接続しているステートフル ディスク data-disk-1 のデータが破損したため、最新のバックアップから復元します。スナップショットからディスク data-disk-2 を作成し、ステートフル MIG example-database-mig で管理されるインスタンス db-instance-1 の破損ディスクを交換します。元のディスク data-disk-1 は、data-disk というデバイス名でアタッチしています。また、自動削除ルールで、ディスクが削除されないように設定されています。

data-disk-1data-disk-2 で置き換えるには、次のコマンドを実行します。

gcloud compute instance-groups managed instance-configs update example-database-mig \
  --instance db-instance-1 \
  --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/data-disk-2 \
  --update-instance \
  --instance-update-minimal-action restart

このコマンドは、次のことを行います。

  1. db-instance-1 のインスタンスごとの構成を更新します。
    1. デバイス名 data-disk のディスクのソースを data-disk-1(前回の構成)から data-disk-2(新しい構成)に更新します。
    2. --stateful-disk フラグで auto-delete パラメータが省略されているため、自動削除ルールでディスクが削除されません。デフォルトの削除ルールは never です。
  2. --update-instance フラグが使用されているため、インスタンスごとの構成に対する更新がすぐに db-instance-1 VM に適用されます。MIG は data-disk-1 を切断し、同じデバイス名 data-diskdata-disk-2 を接続します。
  3. 最小アクションが restart に設定されているため、MIG は db-instance-1 インスタンスを再起動して VM を更新し、データベース アプリケーションが新しいディスクを使用できるようにします。

Terraform

MIG で VM のステートフル ディスクを個別に構成するには、関連するインスタンスごとの構成でステートフル ディスク構成を追加します。次に、インスタンスを更新して構成を適用します。

VM のインスタンスごとの構成を追加するには、google_compute_per_instance_config リソースを使用し、次のサンプルに示すように preserved_state ブロックを含めます。

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "db-instance"
  preserved_state {
    disk {
      device_name = "data-disk"
      source      = google_compute_disk.default.id
      delete_rule = "NEVER"
    }
  }
}

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

REST

MIG で VM のステートフル ディスクを個別に構成するには、関連するインスタンスごとの構成でステートフル ディスク構成を追加または更新します。次に、インスタンスを更新して構成を適用します。

指定した VM にインスタンスごとの構成がまだ存在しない場合は、1 つ以上のディスクのステートフル構成で instanceGroupManagers.updatePerInstanceConfigs メソッドまたは regionInstanceGroupManagers.updatePerInstanceConfigs メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

指定された VM のインスタンスごとの構成ファイルがすでに存在する場合は、1 つまたは複数のディスクのステートフル構成で instanceGroupManagers.patchPerInstanceConfigs メソッドまたは regionInstanceGroupManagers.patchPerInstanceConfigs メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

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

  • PROJECT_ID: リクエストのプロジェクト ID。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: MIG の名前。
  • VM_NAME: ステートフル ディスクを構成する VM の名前。
  • DEVICE_NAME: ディスクのアタッチに使用されるデバイス名。
  • DISK: 指定された DEVICE_NAME でアタッチする既存の永続ディスクの URI。ゾーンディスクの場合は projects/project-id/zones/zone/disks/disk-name、リージョン ディスクの場合は projects/project-id/regions/region/disks/disk-name の形式になります。

    インスタンスごとの構成でデバイスがすでに定義されている場合、"source": "DISK" フィールドは省略できます。それ以外の場合は必須です。

    source フィールドを省略した場合、現在構成されているディスク URI は変更されません。

  • MODE: 省略可。ディスクのモードを指定します。mode は、source が指定されている場合にのみ使用できます。使用可能なオプションは次のとおりです。

    • READ_ONLY: 読み取り専用。
    • READ_WRITE: デフォルト。読み取り / 書き込み。

    省略した場合は、デフォルト値が新しいステートフル ディスク構成に設定されます。既存の構成では、値は変更されません。

  • DELETE_RULE: 省略可。VM が削除されたときにステートフル ディスクに行われる処理を表す値。使用できるオプションは次のとおりです。

    • never: デフォルト。インスタンスの削除時にディスクを削除せず、ディスクを切断します。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときにディスクを削除します。たとえば、インスタンスが手動で削除された場合や、グループサイズが縮小された場合にディスクを削除します。

    autoDelete フィールドを省略すると、デフォルト値が新しいステートフル ディスク構成に設定されます。既存の構成では、値は変更されません。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成の場合、ステートフル ディスクは常に保持されます。

  • FINGERPRINT: 省略可。指定された構成のフィンガープリント(すでに存在する場合)。楽観的ロックに使用されます。最新のフィンガープリントを表示するには、get() リクエストでリソースを取得します。

updatePerInstanceConfigs メソッドと patchPerInstanceConfigs メソッドは、指定されたインスタンスごとの構成を更新しますが、その構成の更新を関連するマネージド VM に適用することはありません。インスタンスを再作成または更新するように MIG に指示すると、インスタンスに変更が適用されます。インスタンスを選択して更新し、変更を適用することもできます。

現在接続しているステートフル ディスク data-disk-1 のデータが破損したため、最新のバックアップから復元します。スナップショットからディスク data-disk-2 を作成し、ステートフル MIG example-database-mig で管理されるインスタンス db-instance-1 の破損ディスクを交換します。元のディスク data-disk-1 は、data-disk というデバイス名でアタッチしています。また、自動削除ルールで、ディスクが削除されないように設定されています。

新しいディスクで db-instance-1 のインスタンスごとの構成を更新するには、patchPerInstanceConfigs メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "db-instance-1",
      "preservedState" : {
        "disks": {
          "data-disk" : {
            "source": "projects/example-project/zones/us-east1-c/disks/data-disk-2"
          }
        }
      }
    }
  ]
}

このメソッドは、db-instance-1 のインスタンスごとの構成にパッチを適用します。

  1. デバイス名 data-disk のディスクの sourcedata-disk-1(前回の構成)から data-disk-2(新しい構成)に更新します。
  2. リクエストでパラメータが省略されているため、mode パラメータと autoDelete パラメータは変更されません。

構成の更新はまだ db-instance-1 VM に適用されていません。MIG は、インスタンスを再作成または更新するときに構成の更新を適用します。

インスタンスごとの構成の更新を db-instance-1 VM に適用するには、インスタンスの instanceGroupManagers.applyUpdatesToInstances メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/applyUpdatesToInstances
{
  "instances": ["/zones/us-east1-c/instances/db-instance-1"],
  "minimalAction": "RESTART"
}

このメソッドは、マネージド インスタンスの保持状態を更新して、data-disk-1 を切断し、同じデバイス名 data-diskdata-disk-2 をアタッチします。minimalActionRESTART に設定されているため、このメソッドは db-instance-1 VM を再起動し、データベース アプリケーションが新しいディスクを使用できるようにします。

ステートフル ディスクの接続解除または個々の VM のステートレス ディスクの宣言

ステートフル ディスクの接続解除が必要になることがあります。また、個々の VM でステートレスとして扱われるように構成しなければならない場合もあります。例:

  • アプリを再構築してディスクから状態を移動する場合。
  • 誤ってステートフルとした構成ディスクを元に戻したい場合。

ステートフル ディスクを切断するか、個々の VM でステートレスにするには、関連するインスタンスごとの構成からディスクのステートフル構成を削除するか、インスタンスごとの構成全体を削除します。変更を適用すると、次の処理が行われます。

  • インスタンス テンプレートにディスクが定義されていない場合、MIG はディスクを切断します。
    • 構成内の自動削除ルールに関係なく、インスタンスごとの構成から構成を削除しても、MIG はディスクを削除しません。
  • インスタンス テンプレートにディスクが定義されている場合、MIG はディスクをステートレスとして扱います。つまり、インスタンスの作成、更新、自動修復イベントが発生すると、インスタンス テンプレートのソースからディスクが再作成されます。

明示的に選択しない限り、インスタンスごとの構成からディスク構成を削除しても、実行中の VM インスタンスは再起動されません。

詳細については、インスタンスごとの構成の更新を適用するをご覧ください。

gcloud

MIG でステートフル ディスクを切断するか、個々の VM でステートレスと宣言するには、関連するインスタンスごとの構成からステートフル ディスク構成を削除するか、他の状態が含まれていない場合に、インスタンスごとの構成全体を削除します。インスタンスを更新して構成を適用します。

関連するインスタンスごとの構成からステートフル ディスクの構成を削除するには、--remove-stateful-disks フラグを指定して gcloud compute instance-groups managed instance-configs update コマンドを使用します。--update-instance フラグ(デフォルト)を使用すると、インスタンスに変更がすぐに適用されます。--no-update-instance を使用すると、変更はすぐに適用されず、次にインスタンスを再作成または更新するときに適用されます。

gcloud compute instance-groups managed instance-configs update NAME \
  --instance VM_NAME \
  --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

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

  • NAME: MIG の名前。
  • VM_NAME: ステートフル構成を削除する VM の名前。
  • DEVICE_NAME: ディスクのアタッチに使用されるデバイス名。
  • MINIMAL_ACTION: インスタンスごとの構成で VM を更新するときに、少なくとも指定されたアクションを実行します。--update-instance と組み合わせて使用します。値は次のいずれかにする必要があります。

    • none: アクションなし。
    • refresh: VM を停止せずに適用できる更新を適用します。
    • restart: VM を停止してから再起動します。
    • replace: VM を再作成します。

    省略した場合は、更新に必要な最も影響の少ない操作が使用されます。

example-legacy-group という名前の MIG でレガシー アプリケーションを実行します。MIG の各 VM は、デバイス名 boot-disk を使用してアプリケーション データをブートディスクに保存します。インスタンスごとの構成を使用して、各ブートディスクをステートフルに構成しました。アプリケーション データを追加のディスクに移動したので、各 VM でブートディスクをステートレスにし、新しいイメージの更新を簡単にできるようにします。

たとえば、各インスタンスで node-1 に次のコマンドを実行します。

gcloud compute instance-groups managed instance-configs update example-legacy-group \
  --instance node-1 \
  --remove-stateful-disks boot-disk \
  --update-instance

このコマンドは、次のことを行います。

  1. デバイス名 boot-disk のディスク構成を node-1 のインスタンスごとの構成から削除します。
  2. --update-instance フラグが使用されているため、インスタンスごとの構成に対する更新がすぐに node-1 VM に適用されます。MIG は、マネージド インスタンスの preservedStateFromConfig からブートディスクを削除し、ブートディスクをステートレスとして扱います。つまり、インスタンスの作成、更新、自動修復イベントが発生すると、インスタンス テンプレートのブートイメージからディスクが再作成されます。

REST

MIG でステートフル ディスクを切断するか、個々の VM でステートレスと宣言するには、関連するインスタンスごとの構成からステートフル ディスク構成を削除するか、他の状態が含まれていない場合に、インスタンスごとの構成全体を削除します。次に、インスタンスを更新して構成を適用します。

関連するインスタンスごとの構成からステートフル ディスクの構成を削除するにはinstanceGroupManagers.patchPerInstanceConfigs メソッドまたは regionInstanceGroupManagers.patchPerInstanceConfigs メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : null
        },
        ...
      },
      "fingerprint: "FINGERPRINT"
      ...
    }
  ]
}

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

  • PROJECT_ID: リクエストのプロジェクト ID。
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)。
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: MIG の名前。
  • VM_NAME: ステートフル構成を削除する VM の名前。
  • DEVICE_NAME: ディスクのアタッチに使用されるデバイス名。
  • FINGERPRINT: 指定された構成のフィンガープリント(すでに存在する場合)。楽観的ロックに使用されます。最新のフィンガープリントを表示するには、get() リクエストでリソースを取得します。

patchPerInstanceConfigs メソッドは、指定されたインスタンスごとの構成にパッチを適用しますが、関連する VM に変更を適用することはありません。この変更は、インスタンスの再作成または更新時に VM に適用されます。変更は手動で行うか、自動ローリング アップデートを使用します。

example-legacy-group という名前の MIG でレガシー アプリケーションを実行します。MIG の各 VM は、デバイス名 boot-disk を使用してアプリケーション データをブートディスクに保存します。スタンドアロン VM を MIG に移行するときに、MIG のインスタンスごとの構成でブートディスクをステートフルとして構成しました。アプリケーション データを追加のディスクに移動したので、各 VM でブートディスクをステートレスにし、新しいイメージの更新を簡単にできるようにします。

  1. インスタンスの patchPerInstanceConfigs メソッドを呼び出します。たとえば、ブートディスクの null 値を使用して node-1 を呼び出します。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/patchPerInstanceConfigs
    
    {
      "perInstanceConfigs": [
        {
          "name": "node-1",
          "preservedState" : {
            "disks": {
              "boot-disk" : null
            }
          }
        }
      ]
    }
    

    このメソッドは、node-1 のインスタンスごとの構成から、デバイス名が boot- disk のディスク構成を削除します。構成の更新はまだ node-1 VM インスタンスに適用されていません。構成の更新は、次にインスタンスが再作成または更新されるときに適用されます。

  2. インスタンスごとの構成の更新を node-1 VM インスタンスに適用するには、インスタンスの instanceGroupManagers.applyUpdatesToInstances メソッドを呼び出します。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/applyUpdatesToInstances
    {
      "instances": ["/zones/us-east1-c/instances/node-1"]
    }
    

    MIG は、node-1 インスタンスの preservedStateFromConfig からブートディスクを削除し、ディスクをステートレスとして扱います。つまり、インスタンスの作成、更新、自動修復イベントが発生すると、インスタンス テンプレートのブートイメージからディスクが再作成されます。

フィードバック

ステートフル MIG に関するユースケース、課題、フィードバックを募集しています。mig-discuss@google.com にフィードバックをお寄せください。

次のステップ