ネットワーク間の VM の移行


このページでは、ネットワーク間で 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

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

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

    REST

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

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

      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 を移行する前に、新しいネットワークで必要なファイアウォール ルール、ルート、ロードバランサなどのネットワーク インフラストラクチャ リソースを作成することをおすすめします。こうすることで、VM がオフラインになる時間を短縮できます。

コンソール

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

    [VM インスタンス] に移動

  2. VM インスタンス名をクリックして、詳細ページを開きます。

  3. [停止]()をクリックします。

  4. 確認のダイアログが表示されたら、[停止] をクリックします。

  5. VM が停止したら、[編集] をクリックします。

  6. [ネットワーク インターフェース] で、移行するインターフェースをクリックします。

  7. インターフェースの [ネットワーク] フィールドで、インターフェースの新しいネットワークを選択します。

  8. インターフェースの [サブネットワーク] フィールドで、インターフェースの新しいサブネットを選択します。

  9. サブネット範囲から IP アドレスを割り振る場合は、[内部 IP アドレス] フィールドに [自動] を指定します。未使用のアドレスを手動で割り振るには、[カスタム] を指定します。

  10. [完了] をクリックして、ネットワーク インターフェースの編集パネルを閉じます。

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

  12. VM の保存が完了したら、[開始]()をクリックします。

  13. 確認のダイアログが表示されたら、[開始] をクリックします。

gcloud

  1. VM を停止する

    gcloud compute instances stop INSTANCE_NAME \
        --zone=ZONE_NAME

    ここで

    • INSTANCE_NAME は VM インスタンスの名前です。
    • ZONE_NAME は、インスタンスを含むゾーンの名前です。
  2. 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 の場合、NICnic0 です。
    • NETWORK_NAME はターゲット ネットワーク名です。VM をサービス プロジェクト ネットワークからホスト プロジェクト ネットワークに移行する場合、ターゲット ネットワークに完全修飾名 projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME を使用する必要があります。
    • SUBNET_NAME はターゲット サブネット名です。このサブネットは VM と同じリージョンに存在する必要があります。VM をサービス プロジェクト ネットワークからホスト プロジェクト ネットワークに移行する場合、サブネットに完全修飾名 projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME を使用する必要があります。
  3. VM を起動する

    移行には数分かかる場合があります。移行先で VM を起動できるようになるまで待機してください。

    gcloud compute instances start INSTANCE_NAME \
        --zone=ZONE_NAME

    ここで

    • INSTANCE_NAME は VM インスタンスの名前です。
    • ZONE_NAME は、インスタンスを含むゾーンの名前です。

REST

  1. 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 は、インスタンスを含むゾーンの名前です。
  2. インスタンスの詳細を表示します。

    GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME
    

    ここで

    • PROJECT_ID はプロジェクト ID です。
    • ZONE_NAME は、インスタンスを含むゾーンの名前です。
    • INSTANCE_NAME は VM インスタンスの名前です。
  3. インターフェースのフィンガープリントを見つけます。

    ネットワーク インターフェースを更新するには、フィンガープリントが必要です。

    コマンドの出力を調べて、networkInterfaces フィールドの内容を見つけます。更新するインターフェースの名前を持つ項目を見つけます(単一インターフェースの VM の場合、名前は nic0 です)。この項目の fingerprint フィールドの文字列をコピーして、次の手順で使用します。

  4. 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 の場合、NICnic0 です。
    • 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 は、前のステップで取得したフィンガープリントです。
  5. 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 は、インスタンスを含むゾーンの名前です。

次のステップ