このページでは、ネットワーク間で VM インスタンスを移行する方法について説明します。複数のネットワーク インターフェースを使用して複数のネットワークに接続されている VM の場合、このプロセスではそのうちの 1 つのインターフェースが更新され、残りはそのままになります。
次の移行がサポートされています。
- 1 つのプロジェクト内での、レガシー ネットワークから VPC ネットワークへの移行
- 1 つのプロジェクト内での、VPC ネットワークから別の VPC ネットワークへの移行
- 1 つの VPC ネットワーク内での、サブネットから別のサブネットへの移行
- サービス プロジェクト ネットワークから共有 VPC ホスト プロジェクトの共有ネットワークへの移行
いずれの場合も、VM は移行前のリージョンとゾーンに残ります。接続されているネットワークのみが変更されます。
始める前に
- Virtual Private Cloud のドキュメントを確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
要件
VM は、移行するにあたって次の要件を満たしている必要があります。
- この移行は「コールド」移行です。VM は移行前に停止している必要があります。
- VM はインスタンス グループまたはネットワーク エンドポイント グループ(NEG)に属していてはなりません。
- VM が非マネージド インスタンス グループまたは NEG にある場合は、移行する前にグループから除外する必要があります。
- マネージド インスタンス グループ内の VM は移行できません。インスタンス テンプレートを新しいネットワークにコピーし、そのテンプレートを使用してマネージド インスタンス グループを再作成する必要があります。
- ターゲット プール内のインスタンスは事前に削除せずに移動できます。ターゲット プールは、両方のネットワークに対応するように拡張されます。
制限事項
- VM インターフェースはレガシー ネットワークに移行できません。
- 移行中、ネットワーク インターフェースに割り振られる MAC アドレスは変更されます。そのため、サードパーティとの使用許諾契約など、MAC アドレスと密接に関連するサービスが影響を受ける可能性があります。
- 異なる IP 範囲のネットワークまたはサブネットに VM を移行する場合は、インスタンスの内部 IP アドレスを変更する必要があります。同じ IP 範囲のサブネットに移行する場合は、移行時にアドレスを指定することで、もとの IP アドレスを保持できます(移行先でまだ使用されていない場合に限る)。
- ターゲット サブネットの IP 範囲がソースと同じでない場合、インターフェースの IP アドレスは新しいサブネット範囲に一致するように変更されます。
- VM の既存の外部 IP アドレスは移行先でも保持されます。そのためには、ターゲット ネットワークで
compute.subnetworks.useExternalIp
権限が必要です。また、ターゲット ネットワークでは constraints/compute.vmExternalIpAccess 制限により外部 IP アドレスを無効にできなくなります。
VM の移行
VM を移行する前に、新しいネットワークで必要なファイアウォール ルール、ルート、ロードバランサなどのネットワーク インフラストラクチャ リソースを作成することをおすすめします。こうすることで、VM がオフラインになる時間を短縮できます。
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM インスタンス名をクリックして、詳細ページを開きます。
[停止](
)をクリックします。確認のダイアログが表示されたら、[停止] をクリックします。
VM が停止したら、[編集]
をクリックします。[ネットワーク インターフェース] で、移行するインターフェースをクリックします。
インターフェースの [ネットワーク] フィールドで、インターフェースの新しいネットワークを選択します。
インターフェースの [サブネットワーク] フィールドで、インターフェースの新しいサブネットを選択します。
サブネット範囲から IP アドレスを割り振る場合は、[内部 IP アドレス] フィールドに [自動] を指定します。未使用のアドレスを手動で割り振るには、[カスタム] を指定します。
[完了] をクリックして、ネットワーク インターフェースの編集パネルを閉じます。
[保存] をクリックします。
VM の保存が完了したら、[開始](
)をクリックします。確認のダイアログが表示されたら、[開始] をクリックします。
gcloud
VM を停止する
gcloud compute instances stop INSTANCE_NAME \ --zone=ZONE_NAME
ここで
- INSTANCE_NAME は VM インスタンスの名前です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
VM を移行する
gcloud compute instances network-interfaces update INSTANCE_NAME \ --zone=ZONE_NAME \ --network-interface=NIC \ --network=NETWORK_NAME \ --subnetwork=SUBNET_NAME
ここで
- INSTANCE_NAME は VM インスタンスの名前です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
- NIC は、更新するインターフェースの名前です。インターフェースが 1 つの VM の場合、NIC は
nic0
です。 - NETWORK_NAME はターゲット ネットワーク名です。VM をサービス プロジェクト ネットワークからホスト プロジェクト ネットワークに移行する場合、ターゲット ネットワークに完全修飾名
projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
を使用する必要があります。 - SUBNET_NAME はターゲット サブネット名です。このサブネットは VM と同じリージョンに存在する必要があります。VM をサービス プロジェクト ネットワークからホスト プロジェクト ネットワークに移行する場合、サブネットに完全修飾名
projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
を使用する必要があります。
VM を起動する
移行には数分かかる場合があります。移行先で VM を起動できるようになるまで待機してください。
gcloud compute instances start INSTANCE_NAME \ --zone=ZONE_NAME
ここで
- INSTANCE_NAME は VM インスタンスの名前です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
REST
VM を停止する
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/stop
ここで
- PROJECT_ID はプロジェクト ID です。
- INSTANCE_NAME は VM インスタンスの名前です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
インスタンスの詳細を表示します。
GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME
ここで
- PROJECT_ID はプロジェクト ID です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
- INSTANCE_NAME は VM インスタンスの名前です。
インターフェースのフィンガープリントを見つけます。
ネットワーク インターフェースを更新するには、フィンガープリントが必要です。
コマンドの出力を調べて、
networkInterfaces
フィールドの内容を見つけます。更新するインターフェースの名前を持つ項目を見つけます(単一インターフェースの VM の場合、名前はnic0
です)。この項目のfingerprint
フィールドの文字列をコピーして、次の手順で使用します。VM を移行する
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NIC { "network": NETWORK_NAME, "subnetwork": SUBNET_NAME, "networkIP": IP_ADDRESS, "name": NIC, "fingerprint": FINGERPRINT }
- PROJECT_ID はプロジェクト ID です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
- INSTANCE_NAME は VM インスタンスの名前です。
- NIC は、更新するインターフェースの名前です。インターフェースが 1 つの VM の場合、NIC は
nic0
です。 - NETWORK_NAME はターゲット ネットワーク名です。VM をサービス プロジェクト ネットワークからホスト プロジェクト ネットワークに移行する場合、ターゲット ネットワークに完全修飾名
projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
を使用する必要があります。 - SUBNET_NAME はターゲット サブネット名です。このサブネットは VM と同じリージョンに存在する必要があります。VM をサービス プロジェクト ネットワークからホスト プロジェクト ネットワークに移行する場合、サブネットに完全修飾名
projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
を使用する必要があります。 - IP_ADDRESS は、移行先でのインスタンスの内部 IP アドレスです。このフィールドを省略すると、インターフェースに内部 IP アドレスが自動的に割り当てられます。
- FINGERPRINT は、前のステップで取得したフィンガープリントです。
VM を起動する
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/start
ここで
- PROJECT_ID はプロジェクト ID です。
- INSTANCE_NAME は VM インスタンスの名前です。
- ZONE_NAME は、インスタンスを含むゾーンの名前です。
次のステップ
- インスタンスを別のゾーンに移動する方法を学習する。
- ライブ マイグレーションについて学習する。
- VM のステータスを確認する。