このページでは、projects.moveInstance
API を使用するか、または一連の手順を行い手動で VM インスタンスをゾーン間で移動する方法を説明します。
可能な限り、projects.moveInstance
API を使用してインスタンスを自動的に移動する必要があります。API を使用できない場合でも、以下の手順に従いインスタンスを手動で移動できます。
- 元のインスタンスに接続されている永続ディスクのスナップショットを作成します。
- 移動先のゾーンに永続ディスクのコピーを作成します。
- 外部 IP アドレスと内部 IP アドレスの場合:
- インスタンスを同じリージョンのゾーン間で移動する際にエフェメラル IP アドレスを保持する場合は、インスタンスに割り当てられたエフェメラル IP アドレスを静的 IP アドレスに一時的にプロモートし、移動先のゾーンで作成した新しい VM インスタンスに割り当てます。
- インスタンスをリージョン間で移動する場合は、VM インスタンス用に別の IP アドレスを選択する必要があります。
- 移動先のゾーンで、新しいインスタンスを作成して起動します。リージョン間で移動する場合は、新しいインスタンスに新たなサブネットワークを選択する必要もあります。
- 新しい永続ディスクを新しいインスタンスに接続します。
- 外部 IP アドレスを新しいインスタンスに割り当てます。必要に応じて、アドレスをエフェメラル外部 IP アドレスに降格します。
- スナップショット、元のディスク、元のインスタンスを削除します。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- ゾーンのドキュメントを読みます。
要件
インスタンスを移動するには、次の要件を満たしている必要があります。
- 新しいスナップショットの作成とエフェメラル外部 IP アドレスの昇格に十分な割り当てがプロジェクトに存在すること。
- 移動先のリージョンに、新しいインスタンスとディスクに十分な割り当てがあること。たとえば、移動するインスタンスにディスクが 3 つ接続されている場合、3 つ分の一時的な永続ディスク スナップショットと 3 つ分の新しいディスクの作成に十分な割り当てが必要です。新しいディスクを作成すると、一時スナップショットを削除できます。
- 移動するインスタンスに接続されている永続ディスクが、複数のインスタンスにアタッチされていないこと。
- インスタンスに GPU が含まれている場合は、使用する GPU がターゲット ゾーンで使用可能であること。GPU と使用可能なゾーンのリストについては、Compute Engine の GPU をご覧ください。
移動中の VM はシャットダウンされ、移動後に再起動します。インスタンスの移動後は、元のリソースへの参照をすべて更新します。たとえば、以前のインスタンスを指すターゲット インスタンスやターゲット プールなどでの参照を更新します。
制限事項
作業を軽減するには、できるだけ moveInstances
API を使用するべきですが、moveInstances
API を使用できないシナリオもあります。特に、次のシナリオでは手動での移動が必要になります。
- VM インスタンスが現在
TERMINATED
状態になっている。 - VM インスタンスがマネージド インスタンス グループ(MIG)のメンバーになっている。
- リージョン間、たとえば
us-west1-a
とasia-south1-b
の間でインスタンスを移動するときに、VM がサブネットワークに属している。この場合、手動での移動を行い、インスタンスに新しいサブネットワークを選択する必要があります。 - VM インスタンスにローカル SSD がアタッチされているか、移動先のゾーンで利用できない GPU を使用している。
- ローカル SSD は一時ストレージとしての使用が意図されています。ローカル SSD 上のデータは手動によるインスタンス終了後に保持されません。このため、インスタンス移動の一環として実行する必要があります。ローカル SSD のデータを維持する必要がある場合は、永続ディスクなど、耐久性のあるストレージ オプションを使用してください。
- 必要な GPU が移動先のゾーンで利用できない場合は、同じ GPU を提供する新しいゾーンを選択するか、移動先のゾーンで新しい GPU を選択してください。
- VM インスタンスが UEFI ファームウェアを使用する Shielded VM である。
手動による移動と自動移動のどちらを行うかに関係なく、要件を満たしていなければ、インスタンスを正常に移動することはできません。
リソース プロパティ
移動の際、サーバーが生成した、インスタンスとディスクのプロパティのいくつかが変更されます。
インスタンス プロパティの変更
プロパティ名 | 変更 |
---|---|
内部 IP アドレス | 通常は新しい内部 IP アドレスが割り当てられますが、インスタンスで元の内部 IP アドレスが保持される場合もあります。 |
外部 IP アドレス | インスタンスが同じリージョンのゾーンの間で移動する場合、外部 IP アドレスは変わりません。それ以外の場合は、VM インスタンスに別の外部 IP アドレスを選択します。 |
CPU プラットフォーム | 移動先のゾーンで利用できる CPU のプラットフォームによっては、移動後のインスタンスが別の CPU プラットフォームを使用する可能性があります。各ゾーンのすべての CPU プラットフォームの完全な一覧については、利用可能なリージョンとゾーンをご覧ください。 |
ネットワーク / サブネットワーク | インスタンスがサブネットワークに属している場合に、リージョン間でインスタンスを移動する場合は、インスタンスに新しいサブネットワークを選択する必要があります。同じリージョン内のゾーン間でインスタンスを移動する場合は、同じサブネットワークが保持されます。 |
ディスク プロパティの変更
プロパティ名 | 変更 |
---|---|
ソース スナップショット | 新しいディスクのソース スナップショットは、移動中に作成された一時スナップショットに設定されます。 |
ソース スナップショット ID | ソース スナップショット ID は、一時スナップショットの ID に設定されます。 |
ソースイメージ | ソースイメージ フィールドは空です。 |
イメージ ID | イメージ ID は空です。 |
最後の接続解除のタイムスタンプ | 最後の接続解除のタイムスタンプは空です。 |
最後の接続のタイムスタンプ | 最後の接続のタイムスタンプは、新しいディスクが新しいインスタンスに接続されたときのタイムスタンプに変更されます。 |
インスタンスとディスクの両方のプロパティの変更
プロパティ名 | 変更 |
---|---|
ID | 新しいリソース ID が生成されます。 |
作成のタイムスタンプ | 新しい作成タイムスタンプが生成されます。 |
ゾーンのリソースの URL | すべてのゾーンリソース URL が、移動先のゾーンを反映するよう変更されます。変更されるリソースの URL は次のとおりです。
|
インスタンスを自動的に移動する
インスタンスを移動する前に、要件と制限事項を確認してください。
gcloud
インスタンスが稼働中であることを確認します。その後、gcloud
ツールを使用して compute instances move
サブコマンドを実行し、インスタンスを移動します。
たとえば、example-instance-1
というインスタンスとそれに接続しているすべての永続ディスクを現在実行中の us-central1-b
から新しいリージョン us-central1-f
に移動するには、次のコマンドを実行します。
gcloud compute instances move example-instance-1 \
--zone us-central1-b --destination-zone us-central1-f
API
API では、moveInstance
API に POST
リクエストを発行します。その際、リクエスト本文で targetInstance
と destinationZone
を指定します。例:
{
"targetInstance": "zones/us-central1-b/instances/example-instance-1",
"destinationZone": "zones/us-central1-f"
}
インスタンスを手動で移動する
可能であれば、moveInstance
API を使用してインスタンスを自動的に移動してください。インスタンスの移動に必要な処理がすべて自動的に行われます。ただし、この API を使用できない場合は、手動での移動が可能です。
次の例では、mybootdisk
と mydatadisk
の 2 つの永続ディスクを持つインスタンス myinstance
を europe-west1-a
から us-west1-b
に移動する方法を示します。サンプルのインスタンスは、次のようになります。
gcloud compute instances list
NAME ZONE MACHINE_TYPE INTERNAL_IP EXTERNAL_IP STATUS myinstance europe-west1-a n1-standard-4 10.240.116.177 146.148.112.106 RUNNING
インスタンスを別のゾーンに移動するには、次のようにします。
移動するインスタンスに関連付けられているディスクを特定します。
この例では、
myinstance
インスタンスに次の 2 つのディスクが関連付けられています。mybootdisk
というブートディスクmydatadisk
というデータディスク
mybootdisk
とmydatadisk
の自動削除の状態をfalse
に設定して、インスタンスの削除時に、これらのディスクが自動削除されないようにします。gcloud compute instances set-disk-auto-delete myinstance --zone europe-west1-a \ --disk mybootdisk --no-auto-delete
状態が更新された場合は、
gcloud compute
がレスポンスUpdated [...]
を返します。自動削除状態がすでに false に設定されている場合は、gcloud compute
が次のレスポンスを返します。No change requested; skipping update for [myinstance].
(省略可)インスタンスのメタデータを保存します。
インスタンスを削除するときに、インスタンスのメタデータも削除されます。その情報を別のファイルに保存しておくと、新しいインスタンスにインスタンスのメタデータを再適用できます。
インスタンスのメタデータを次のように記述します。
gcloud compute instances describe myinstance --zone europe-west1-a
この内容は別のファイルに保存します。
データのバックアップを作成します。
予防措置として、インスタンスに永続ディスクが接続している間に、永続ディスクのスナップショットを使用してデータのバックアップを作成します。スナップショットを取得する前に、ディスクバッファをクリアして、スナップショットが永続ディスクの状態と一致するようにします。
ディスク バッファをクリアした後で、次のようにしてスナップショットを作成します。
gcloud compute disks snapshot mybootdisk mydatadisk \ --snapshot-names backup-mybootsnapshot,backup-mydatasnapshot \ --zone europe-west1-a
スナップショットが作成されたことを確認するには、
gcloud compute snapshots list
を実行します。(省略可)同じリージョン内のゾーン間でインスタンスを移動する際に内部または外部エフェメラル IP アドレスを保持する場合は、その内部または外部 IP アドレスを静的 IP アドレスにプロモートすることで、後で再び使用できます。
インスタンスを削除します。
インスタンスを削除すると、完全にシャットダウンされ、永続ディスクの接続が解除されます。
gcloud compute instances delete myinstance --zone europe-west1-a
gcloud
から、削除を確定するよう求められます。The following instances will be deleted. Any attached disks configured to be auto-deleted will be deleted unless they are attached to any other instances or the
--keep-disks
flag is given and specifies them for keeping. Deleting a disk is irreversible and any data on the disk will be lost. — [myinstance] in [europe-west1-a]Do you want to continue (Y/n)?
すでにこのプロセスの以前の手順でディスクの自動削除状態をオフにしているため、「Y」と入力して続行し、警告を無視します。
次に、ブートディスクとデータディスクの両方について、別のスナップショットを作成します。
gcloud compute disks snapshot mybootdisk mydatadisk \ --snapshot-names mybootsnapshot,mydatasnapshot \ --zone europe-west1-a
Created [.../mydatasnapshot]. Created [.../mybootsnapshot].
(省略可)永続ディスクを削除します。
永続ディスクの名前を新しいディスクに再利用する場合は、その名前を解放するために既存のディスクを削除する必要があります。ディスクを削除すると、永続ディスクのストレージ費用も節約できます。
同じディスク名を再使用する予定がない場合は、削除する必要はありません。
gcloud compute disks delete mybootdisk mydatadisk --zone europe-west1-a
作成したスナップショットから
us-west1-b
に新しい永続ディスクを作成します。まずブートディスクを作成します。gcloud compute disks create mybootdiskb --source-snapshot mybootsnapshot \ --zone us-west1-b
Created [.../mybootdiskb]. NAME ZONE SIZE_GB TYPE STATUS mybootdiskb us-west1-b 100 pd-standard READY
次に、データディスクを作成します。
gcloud compute disks create mydatadiskb --source-snapshot mydatasnapshot \ --zone us-west1-b
Created [.../mydatadiskb]. NAME ZONE SIZE_GB TYPE STATUS mydatadiskb us-west1-b 4000 pd-standard READY
インスタンスを
us-west1-b
に再作成します。インスタンスのメタデータをファイル(たとえば、
myinstance.describe
)に保存することを選択した場合、そのファイルを使用してインスタンスに同じメタデータを設定できます。インスタンスに静的外部 IP アドレスがある場合、そのアドレスを新しいインスタンスに再度割り当てるには
--address [ADDRESS]
オプションを指定します。インスタンスをリージョン間で移動する場合は、新しい VM インスタンス用に別の外部 IP アドレスを選択する必要があります。インスタンスに静的内部 IP アドレスがある場合、そのアドレスを新しいインスタンスに再度割り当てるには
--private-network-ip ADDRESS
オプションを指定します。インスタンスをリージョン間で移動する場合は、新しい VM インスタンス用に別の内部 IP アドレスを選択する必要があります。インスタンスに GPU が含まれていた場合は、
--accelerator
オプションを使用してインスタンスに GPU を追加します。インスタンスで特定のサブネットを使用する場合は、
--subnet [SUBNET_NAME]
フラグを追加します。
その他のフラグの完全なリストについては、gcloud compute instances create コマンドをご覧ください。
gcloud compute instances create myinstanceb --machine-type n1-standard-4 \ --zone us-west1-b \ --disk name=mybootdiskb,boot=yes,mode=rw \ --disk name=mydatadiskb,mode=rw
Created [.../myinstanceb]. NAME ZONE MACHINE_TYPE INTERNAL_IP EXTERNAL_IP STATUS myinstanceb us-west1-b n1-standard-4 10.240.173.229 146.148.112.106 RUNNING
(省略可)永続ディスクのスナップショットを削除します。
仮想マシンが移動されたことを確認した後は、作成した一時スナップショットを削除するとストレージ費用を節約できます。
gcloud compute snapshots delete mybootsnapshot mydatasnapshot
バックアップ スナップショットが不要になった場合は、そのスナップショットも削除します。
gcloud compute snapshots delete backup-mybootsnapshot backup-mydatasnapshot
次のステップ
- プロジェクトのデフォルトのゾーン / リージョンを変更する方法について学習する。
- ライブ マイグレーションについて学習する。
- インスタンスのステータスを確認する。
- Compute Engine への VM の移行について学習する。