既存のワークロードをステートフル マネージド インスタンス グループに移行する


既存のステートフル アプリケーションがスタンドアロン(非マネージド)Compute Engine 仮想マシン(VM)インスタンスにある場合、そのアプリケーションをステートフル マネージド インスタンス グループ(MIG)に移行できます。

ステートフル MIG を構成してマネージド インスタンスを使用すると、次のようなメリットがあります。

  • 状態の維持: インスタンスが再作成されても、インスタンス名、ディスク、メタデータを維持できます。
  • 自動修復: 同じゾーン内で失敗したワークロードを使用して VM が自動的に再作成されます。
  • 自動更新: MIG 内の VM に新しいインスタンス構成や新しいソフトウェア バージョンが適切にデプロイされます。

制限事項

  • 既存の VM を停止して既存のディスクを移行するか、新しいマネージド インスタンスで使用するために一貫したスナップショットを作成する必要があります。
  • VM 名を再利用する場合は、既存の VM を削除する必要があります。
  • アプリケーションは、同じマシンタイプの VM 上で実行できる必要があります。既存のアプリケーションで異なるマシンタイプの複数のインスタンスが必要な場合は、マシンタイプごとに複数のインスタンス テンプレートと MIG を作成します。
  • VM の起動時にアプリケーションを起動する必要があります。カスタム イメージまたは起動スクリプトを使用できます。それぞれのオプションについては以下で説明します。
  • ステートフル ブートディスクを作成する場合、MIG でブートイメージの更新をロールアウトしてもオペレーティング システムまたはソフトウェアを更新できません。
  • マルチゾーンの高可用性を実現するには、複数のゾーンに冗長レプリカを作成し、アプリケーション レベルでデータ レプリケーションを構成する必要があります。ステートフル MIG によって自動修復されるのは同じゾーン内のインスタンスだけです。ゾーン間のフェイルオーバーはオーケストレートされません。

  • ステートフル MIG では自動スケーリングを使用できません。

  • ステートフル MIG の制限事項を確認します。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • Compute Engine

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

始める前に

このガイドでは、gcloud CLI を使用します。このツールにアクセスするには、Cloud Shell を使用します。代わりに、ローカルのパソコンで gcloud CLI を実行する場合は、最新の gcloud CLI をダウンロードしてインストールしてください。

移行の概要

  1. ステートフル MIG を構成するコンポーネントを確認します。
  2. 既存の設定を確認して、共通の VM 仕様を決定します。
  3. (省略可)共通のブートディスク イメージとして機能するカスタム イメージを作成します。
  4. MIG の共通 VM 構成を指定するインスタンス テンプレートを作成します。
  5. 空の MIG を作成します。
  6. 既存の VM を MIG のマネージド インスタンスに変換します(インスタンスごとの構成を含む)。
  7. アプリケーションの耐障害性を高めるため、MIG に自動修復を構成します。
  8. 必要であれば、構成のオーバーヘッドを削減するために、インスタンスごとの構成をステートフル ポリシーに置き換えます。

コンポーネント

ステートフル MIG のマネージド インスタンスは、次のコンポーネントを使用して構成します。

  • インスタンス テンプレートには、マシンタイプ、ブートディスク イメージ、追加ディスクのオプション仕様、任意の起動スクリプトなど、MIG 内の VM の一般的な構成が含まれます。
  • オプションのカスタム イメージにはアプリケーションが含まれます。これは、共通のブートディスク イメージとして機能します。
  • インスタンスごとの構成には、インスタンス固有のステートフル アイテムが含まれます。たとえば、既存のディスクをグループ内の特定のインスタンスにアタッチできます。このディスクは、既存のスタンドアロン インスタンスから切断できます。また、スナップショットやリージョン ディスクから復元できます。ディスクのデバイス名は、インスタンス テンプレートで定義する必要はありません。
  • オプションのステートフル ポリシーには、共通のステートフル アイテムが含まれます。たとえば、インスタンス テンプレートで定義されているように、グループ内のすべてのインスタンスに対して、特定のデバイス名を持つすべてのディスクをステートフルとして定義します。

使用する必要があるコンポーネント

使用する必要があるコンポーネントは既存の設定によって異なります。次の表に、1 つ以上のインスタンスで実行されるアプリケーションの構成の概要を示します。このチュートリアルの後半では、既存の構成を確認して、どの構成を使用する必要があるかを判断します。

ブートディスクにステートフルなデータまたは構成を維持する必要性 アプリケーションの起動方法
アプリケーションが既存のブートディスクで構成されている アプリケーションが起動スクリプトで構成されている
なし: ブートディスクはステートレス
  1. カスタム イメージでインスタンス テンプレートを使用する
  2. ステートフル データディスクにインスタンスごとの構成(またはステートフル ポリシー)を追加する
  1. 起動スクリプトでインスタンス テンプレートを使用する
  2. ステートフル データディスクにインスタンスごとの構成(またはステートフル ポリシー)を追加する
あり: 少なくとも 1 つのブートディスクがステートフル
  1. カスタム イメージでインスタンス テンプレートを使用する
  2. ステートフル ブートディスクとデータディスクにインスタンスごとの構成(またはステートフル ポリシー)を追加する
  1. 起動スクリプトでインスタンス テンプレートを使用する
  2. ステートフル ブートディスクとデータディスクにインスタンスごとの構成(またはステートフル ポリシー)を追加する

既存の設定の確認

既存のスタンドアロン インスタンスを確認し、各インスタンスのマシンタイプ、ディスク、メタデータを検査します。

各インスタンスに instances describe コマンドを使用します。

gcloud compute instances describe INSTANCE_NAME

このガイドの以降のステップに備えて、次の項目を確認してください。

項目 対応
VM のプロパティ
グループで使用するマシンタイプは何か。 このマシンタイプを MIG のインスタンス テンプレートで指定します。
アプリケーションの起動方法: ブートディスクに事前構成されているか。あるいは、起動スクリプトでインストール、構成、起動が行われるか。 アプリケーションがブートディスクに事前構成されている場合は、カスタム イメージを作成し、そのイメージを MIG のインスタンス テンプレートに指定します。

アプリケーションが起動スクリプトで起動される場合は、その起動スクリプトを MIG のインスタンス テンプレートに指定します。

アプリケーションにカスタム ブートディスク イメージと起動スクリプトの両方が必要な場合は、両方をインスタンス テンプレートに指定します。
既存のインスタンス名を保持するかどうか。 インスタンス名を他で使用するには、既存のスタンドアロン インスタンスを削除する必要があります。

ブートディスクがステートレスのままで、MIG で自動ローリング アップデートを使用する場合は、インスタンス名の保持のドキュメントをご覧ください。
ステートフル アイテム
インスタンスごとに、保持する必要があるインスタンス固有のメタデータがあるか。 インスタンスごとの構成を使用して、インスタンス固有のメタデータを指定します。
ブートディスクはステートフルか。ブートディスクに存在しているデータで、状態を保持する必要があるデータがあるか。 ブートディスクの状態を保持する必要がある場合、ブートディスク イメージの更新をロールアウトしてオペレーティング システムやソフトウェアを更新することはできません。
すべてのインスタンスのディスクの種類は同じか。たとえば、すべてのインスタンスが 1 つのデータディスクを使用しているか。あるいは、固有のディスク構成が必要かどうか。 インスタンスに共通のディスク構成がある場合は、インスタンス テンプレートで共通のデバイス名(「data-disk」など)を定義します。これにより、ステートフル ポリシーを使用して、MIG 全体でこれらのディスクをステートフルと宣言できます。その場合、インスタンスごとの構成よりもオーバーヘッドが小さくなります。
グループを拡張する場合、現在のディスクのサイズは十分か。 インスタンス テンプレートで必要なディスクサイズを指定します。新しいインスタンスは、指定したディスクがステートフル ポリシーまたはインスタンスごとの構成で再定義されていなければ、そのディスクを取得します。

このガイドではまず、既存のステートフル ディスクにインスタンスごとの構成を作成する方法について説明します。ただし、グループのインスタンス テンプレートで宣言する共通のデバイス名がディスクに含まれている場合は、後でそれらの構成をステートフル ポリシーに変換できます。

設定例

このガイドでは、次の基本的な例を使用して移行手順について説明します。3 つのスタンドアロン Compute Engine VM で実行されるステートフル アプリケーションがあるとします。次のような VM 仕様を想定しています。

  • 各 VM のマシンタイプは同じです。
  • 各 VM は同じプロジェクトの同一ゾーン内に存在します。
  • 各 VM のブートディスクには同じアプリケーションがあり、そのアプリケーションは VM の起動時に開始するようにブートディスク上に構成されています。
  • 各 VM のブートディスクには、保持する必要があるデータや構成は他に含まれていません。
  • 各 VM にはセカンダリ永続ディスクがあり、ステートフル データ(つまり、現在の状態を維持する必要があるデータ)が含まれています。

このチュートリアルで使用するため、次のように値を編集します。

- Machine type: n2-standard-2
- Project: my-project
- Zone: europe-west1-c
- Name of one of the VMs to migrate: my-instance-1

カスタム イメージの作成

アプリケーションまたはアプリケーションの要件が既存のブートディスクにすでに構成されている場合は、再利用できるカスタム イメージを作成します。また、起動スクリプトを使用するだけでアプリケーションのインストール、構成、起動が行われる場合は、この手順をスキップしてインスタンス テンプレートの作成に進みます。

前述のシナリオ例では、既存の各スタンドアロン VM のブートディスクに構成済みのアプリケーションが含まれています。したがって、手順に沿って、これらのいずれかの VM に基づいてカスタム イメージを作成できます。

  1. インスタンスの 1 つを停止します。

    gcloud compute instances stop my-instance-1
  2. インスタンスの情報を確認して、ディスクのソースを決定します。

    gcloud compute instances describe my-instance-1

    出力は次のようになります。

    ...
    disks:
    – autoDelete: true
      boot: true
      ...
      source: https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
      ...
    

    出力で source フィールドを探します。そのフィールドにあるブートディスクの完全な URL をメモします。

  3. images create コマンドを使用して、同じソースを使用するカスタム イメージを準備します。

    gcloud compute images create my-boot-image \
        --source-disk=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
    

    出力は次のようになります。

    Created [https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image].
    

インスタンス テンプレートの作成

インスタンス テンプレートは、VM 構成を保存する不変の Compute Engine リソースです。作成したテンプレートは更新できません。後で変更する必要がある場合は、新しいテンプレートを作成して、そのテンプレートをグループに展開します。

次の設定を使用して、新しいインスタンス テンプレートの作成の手順に沿って行います。

  • マシンタイプ: 既存のすべてのインスタンスに適したマシンタイプを指定します。

  • 起動スクリプト: 起動スクリプトを使用してアプリケーションを起動する場合は、そのスクリプトを指定します。

  • ブートディスク:

    • イメージ: MIG 内のすべての VM に共通のブートディスク イメージを指定します。たとえば、既存の VM のブートディスクに基づいてカスタム イメージを作成した場合は、そのイメージを指定します。特定の VM に対して既存のブートディスクを使用する必要がある場合は、あとで説明するように、VM をマネージド インスタンスに変換するときに、VM のブートディスクをインスタンスごとの構成で明示的に指定できます。
    • デバイス名: そのディスクの目的を示すデバイス名を指定します(例: boot-disk)。これにより、1 つのステートフル ポリシーを構成すると、その MIG でそのデバイス名を持つディスクをすべて保持できます。
    • サイズ: 既存のインスタンスと今後インスタンスを追加する場合に備えて、十分なブートディスク サイズを指定します。
  • 追加ディスク: デフォルトでは、インスタンスを MIG に追加すると、テンプレートに基づいてディスクが作成されます。インスタンス テンプレートはリージョン ディスクの構成をサポートしていませんが、その代わりに、後でインスタンスごとの構成を使用してリージョン ディスクを構成できます。

    • デバイス名: 各ディスクに、ディスクの目的を示すデバイス名を指定します(例: data-disk)。
    • サイズ: 今後インスタンスを追加する場合に備えて、十分なディスクサイズを指定します。

この移行を行うために、追加ディスクで最も重要な仕様はデバイス名です。このデバイス名は、ステートフル ディスクを指定するためのキーとして使用されます。類似したディスクに共通のデバイス名を使用すると、共通のステートフル ポリシーを使用して、これらのディスクをすべて MIG 全体で保持できます。インスタンス テンプレートに指定した追加ディスクのサイズまたはイメージは、移行以外で作成する可能性のある新しいインスタンスに新しいディスクを作成する場合にのみ使用されます。このドキュメントの後半で説明するように、既存のインスタンスを移行する場合は、既存のデータディスクを元のインスタンスから切断して新しいマネージド インスタンスに再アタッチすることで、既存のデータディスクを保持します。

次の instance-templates create コマンドは、このシナリオ例のテンプレートを作成します。このコマンドには、前に作成したカスタム ブートイメージを指す --image フラグと、追加のデータディスクが指定されています。

gcloud compute instance-templates create my-instance-template \
 --machine-type=n2-standard-2 \
 --image=https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image \
 --boot-disk-device-name=boot-disk \
 --create-disk=mode=rw,size=100,type=pd-standard,device-name=data-disk

出力は次のようになります。

Created [https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template].
NAME                     MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
my-instance-template  n2-standard-2               2021-04-27T11:02:07.552-07:00

出力の 1 行目にあるテンプレートの URL をメモします。

マネージド インスタンス グループの作成

次のステップでは、マネージド インスタンス グループ(MIG)を作成します。単一ゾーン MIG を作成するには、単一ゾーンでの MIG の作成の手順を行います。リージョン MIG を使用してゾーン障害から保護する場合は、リージョン内の複数のゾーンに VM を持つ MIG を作成するの手順を行います。

MIG を作成するときに、次の設定を行います。

  • グループサイズを 0 に設定します。インスタンスは後で追加します。
  • リージョン MIG を作成する場合は、インスタンスの再配布タイプNONE に設定して、MIG がゾーン間でインスタンスを自動的に再分配しないようにします。

次の instance-groups managed create コマンドは、前述のサンプル設定用にゾーン MIG を作成します。リージョン MIG を作成する場合は、--zone=ZONE--region=REGION に置き換えます。

gcloud compute instance-groups managed create my-mig \
    --size=0 \
    --template=https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template \
    --zone=europe-west1-c

出力は次のようになります。

Created [https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/instanceGroupManagers/my-mig].
NAME    LOCATION        SCOPE  BASE_INSTANCE_NAME  SIZE  TARGET_SIZE  INSTANCE_TEMPLATE         AUTOSCALED
my-mig  europe-west1-c  zone   my-mig              0     0            my-instance-template      no

リソースを作成すると、そのリソースを使用して MIG を操作できます。たとえば、グループへのポリシーの設定や、グループに対するインスタンスの追加または削除などを行うことができます。

既存の VM のマネージド インスタンスへの変換

次の手順で既存の非マネージド VM を MIG 内のマネージド インスタンスに変換します。この手順では、既存のディスクを新しいマネージド インスタンスに移行します。また、既存のディスクのスナップショットを作成し、マネージド インスタンスで使用するスナップショットに基づいてディスクを作成することもできます。

  1. 既存の VM の情報を確認します。

    gcloud compute instances describe my-instance-1
    

    既存の VM で保持する項目をメモします。これには次の項目が含まれます。

    • インスタンス名
    • ブートディスク
    • セカンダリ ディスク
    • インスタンス メタデータ
  2. 既存の VM を停止します。

    gcloud compute instances stop my-instance-1
    
  3. ブートディスクを再利用する場合は、ブートディスクを含むすべてのディスクを切断します。

    gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
    
  4. 同じ名前で別の VM を作成できるように、既存の VM を削除します。インスタンス名を保持しない場合は、既存の VM を削除して以降の課金を停止できます。

    gcloud compute instances delete my-instance-1
    
  5. マネージド インスタンスを作成します。

    • 元のインスタンスを削除していれば、元のインスタンスの名前を再利用できます。削除していない場合は、新しい名前を使用します。
    • このマネージド インスタンスに必要なステートフル ディスクまたはメタデータを指定します。MIG は、インスタンス固有のアイテムをインスタンスごとの構成に保存します。

      • 元の VM インスタンスから切断されたディスクなど、1 つ以上のディスクを指定します。

      • 元の VM インスタンスのメタデータを指定します。

    たとえば、次のコマンドは、元の VM と同じ名前のマネージド インスタンスを作成し、元のデータディスクを再利用します。VM のブートディスクは、グループのインスタンス テンプレートで指定されたイメージから作成されます。

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1    \
        --stateful-metadata=role=primary      \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --zone=europe-west1-c
    

    古い VM のブートディスクを再利用する必要がある場合は、--stateful-disk フラグを追加して同じコマンドを使用します。インスタンス テンプレートで指定した名前と同じデバイス名をブートディスクに使用します。次に例を示します。

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1 \
        --stateful-metadata=role=secondary    \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --stateful-disk=device-name=boot-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1-boot-disk \
        --zone=europe-west1-c
    
  6. 既存の非マネージド VM ごとに、この手順を繰り返します。

設定されたインスタンスごとの構成を表示するには、instance-configs list コマンドを実行します。

gcloud compute instance-groups managed instance-configs list my-mig \
    --zone=europe-west1-c

インスタンスの保持された状態を表示するには、describe-instance コマンドを実行します。

gcloud compute instance-groups managed describe-instance my-mig \
  --instance=my-instance-1 \
  --zone=europe-west1-c

詳細については、MIG でのステートフル構成の適用、表示、削除をご覧ください。

自動修復の構成

MIG は、実行が停止されたマネージド インスタンスを自動的に修復します。アプリケーションの可用性をさらに向上させ、アプリケーションが応答していることを確認するには、アプリケーション ベースのヘルスチェックを構成します。サンプル コマンドについては、ヘルスチェックの設定例をご覧ください。

インスタンスごとの構成ではなくステートフル ポリシーを使用する

ステートフル ポリシーを使用すると、MIG 全体で共通のデバイス名を持つディスクをステートフルとして宣言できます。1 つのステートフル ポリシーを使用すると、インスタンスごとの構成を複数使用するより管理作業が少なくなります。たとえば、ステートフル ポリシーを使用すると、MIG 内のすべてのインスタンスでデバイス名が data-disk のすべてのディスクをステートフルに指定できます。

MIG が次の条件を満たしている場合は、インスタンスごとの構成をステートフル ポリシーに置き換えることができます。

  • 同じようなステートフル ディスクで、すべての VM に同じデバイス名(data-disk など)が割り当てられている。このデバイス名は MIG のインスタンス テンプレートで定義されています。
  • どの VM にもインスタンスごとの構成で指定された固有のステートフル メタデータがない。インスタンスごとの構成でステートフル メタデータを定義している場合は、インスタンスごとの構成からそのディスクを削除できます。ただし、インスタンスごとの構成を維持して、そのインスタンス固有のステートフル メタデータを保持する必要があります。

インスタンスごとの複数の構成を 1 つのステートフル ポリシーに置き換えるには、次の手順を行います。

  1. ステートフル ポリシーでステートフル ディスクを構成します。既存の MIG でディスクにステートフル構成を設定または更新するの手順を行います。

    このシナリオ例では、次のコマンドを使用します。このコマンドでは、MIG 内で特定のデバイス名を持つすべてのディスクが保持されることを宣言します。

    gcloud compute instance-groups managed update my-mig \
      --stateful-disk=device-name=data-disk,auto-delete=never
    
  2. インスタンス固有のメタデータを保持する必要がある場合は、インスタンスごとの構成を更新します。それ以外の場合は、インスタンスごとの構成を削除します。--update-instance フラグを使用して、構成の変更を直ちに適用します。たとえば、インスタンスごとの構成を削除するには、次のコマンドを使用します。

    gcloud compute instance-groups managed instance-configs delete my-mig \
      --instances=my-instance-1 \
      --update-instance
    
  3. (省略可)ステートフル アイテムが、各マネージド インスタンスのポリシー(preservedStateFromPolicy)の保持された状態に保存されていることを確認します。詳細については、マネージド インスタンスの保持された状態の表示をご覧ください。

VM の追加

VM を追加してアプリケーションを拡張する必要がある場合は、MIG のサイズを増やすか、多くのインスタンスを手動で作成することで、VM を追加できます。MIG は、グループのインスタンス テンプレートに基づいて、永続ディスクを含むすべての VM を作成します。グループにステートフル ポリシーがある場合、ステートフル ポリシーに定義されたアイテムは、そのグループ内の新しいインスタンスと既存のインスタンスに対する再起動、再作成、自動修復、更新のすべての操作で保持されます。グループ内の特定の VM にのみステートフル ディスクまたはメタデータを構成する必要がある場合は、インスタンスごとの構成を使用します。

次のステップ