ゾーン間のインスタンスの移動

このページでは、projects.moveInstance API を使用するか、または一連の手順に従って手動で VM インスタンスをゾーン間で移動する方法を説明します。ゾーンが使用不可または非推奨になった場合は、この方法を使用してインスタンスを別のゾーンに移動できます。

インスタンスを移動する手順は、次のとおりです。

  1. 元のインスタンスに接続されている永続ディスクのスナップショットを作成します。
  2. 移動先のゾーンに永続ディスクのコピーを作成します。
  3. インスタンスを同じリージョン内で移動する場合は、インスタンスに割り当てられたエフェメラル外部 IP アドレスを一時的に静的外部 IP アドレスに昇格させます。
  4. 移動先のゾーンで、新しいインスタンスを作成して起動します。リージョン間で移動する場合は、新しいインスタンスに新たなサブネットワークを選択する必要もあります。
  5. 新しい永続ディスクを新しいインスタンスに接続します。
  6. 外部 IP アドレスを新しいインスタンスに割り当てます。必要に応じて、アドレスをエフェメラル外部 IP アドレスに降格します。
  7. スナップショット、元のディスク、元のインスタンスを削除します。

可能な場合は常に、projects.moveInstance API を使用してインスタンスを自動的に移動する必要があります。この API を使用できない場合は、インスタンスを手動で移動できます。

始める前に

要件

インスタンスを移動するには、次の要件を満たしている必要があります。

  • 新しいスナップショットの作成とエフェメラル外部 IP アドレスの昇格に十分な割り当てがプロジェクトに存在すること。
  • 移動先のリージョンに、新しいインスタンスとディスクに十分な割り当てがあること。たとえば、移動するインスタンスにディスクが 3 つ接続されている場合、3 つ分の一時的な永続ディスク スナップショットと 3 つ分の新しいディスクの作成に十分な割り当てが必要です。新しいディスクの作成の完了後は、一時スナップショットを削除できます。
  • 移動するインスタンスに接続されている永続ディスクが、複数のインスタンスに接続されていないこと。
  • インスタンスに GPU が含まれている場合は、使用する GPU がターゲット ゾーンで使用可能であること。GPU と使用可能なゾーンのリストについては、Compute Engine の GPU をご覧ください。

インスタンスの移動後は、元のリソースへの参照をすべて更新します。たとえば、以前のインスタンスを指すターゲット インスタンスやターゲット プールなどでの参照を更新します。

制限事項

作業を軽減するには、できるだけ moveInstances API を使用するべきですが、moveInstances API を使用できないシナリオもあります。特に、次のシナリオでは手動での移動が必要になります。

  • VM が現在 TERMINATED 状態になっている。
  • リージョン間、たとえば us-west1-aasia-south1-b の間でインスタンスを移動するときに、VM がサブネットワークに属している。この場合、手動での移動を行い、インスタンスに新しいサブネットワークを選択する必要があります。
  • インスタンスにローカル SSD が接続されているか、移動先のゾーンで利用できない GPU を使用している。
    • ローカル SSD は一時ストレージとしての使用が意図されています。ローカル SSD 上のデータは手動によるインスタンス終了後に保持されません。このため、インスタンス移動の一環として実行する必要があります。ローカル SSD のデータを維持する必要がある場合は、永続ディスクなど、耐久性のあるストレージ オプションを使用してください。
    • 必要な GPU が移動先のゾーンで利用できない場合は、同じ GPU を提供する新しいゾーンを選択するか、移動先のゾーンで新しい GPU を選択してください。

手動による移動と自動移動のどちらを行うかに関係なく、要件を満たしていなければ、インスタンスを正常に移動することはできません。

リソース プロパティ

移動の際、サーバーが生成した、インスタンスとディスクのプロパティのいくつかが変更されます。

インスタンス プロパティの変更

プロパティ名 変更
内部 IP アドレス 通常は新しい内部 IP アドレスが割り当てられますが、インスタンスで元の内部 IP アドレスを保持することもできます。
外部 IP アドレス インスタンスを同じリージョン内のゾーン間で移動する場合、インスタンスの外部 IP アドレスに変わりはありません。それ以外の場合は、VM インスタンスに別の外部 IP アドレスを選択します。
CPU プラットフォーム 移動先のゾーンで利用できる CPU のプラットフォームによっては、移動後のインスタンスが別の CPU プラットフォームを使用する可能性があります。各ゾーンのすべての CPU プラットフォームの完全な一覧については、利用可能なリージョンとゾーンをご覧ください。
ネットワーク / サブネットワーク インスタンスがサブネットワークに属している場合に、リージョン間でインスタンスを移動する場合は、インスタンスに新しいサブネットワークを選択する必要があります。同じリージョン内のゾーン間でインスタンスを移動する場合は、同じサブネットワークが保持されます。

ディスク プロパティの変更

プロパティ名 変更
ソース スナップショット 新しいディスクのソース スナップショットは、移動中に作成された一時スナップショットに設定されます。
ソース スナップショット ID ソース スナップショット ID は、一時スナップショットの ID に設定されます。
ソースイメージ ソースイメージ フィールドは空です。
イメージ ID イメージ ID は空です。
最後の接続解除のタイムスタンプ 最後の接続解除のタイムスタンプは空です。
最後の接続のタイムスタンプ 最後の接続のタイムスタンプは、新しいディスクが新しいインスタンスに接続されたときのタイムスタンプに変更されます。

インスタンスとディスクの両方のプロパティの変更

プロパティ名 変更
ID 新しいリソース ID が生成されます。
作成のタイムスタンプ 新しい作成タイムスタンプが生成されます。
ゾーンのリソースの URL すべてのゾーンリソース URL が、移動先のゾーンを反映するよう変更されます。変更されるリソースの URL は次のとおりです。
  • インスタンスのソースディスクの URL
  • インスタンスのマシンタイプの URL
  • セルフリンクの URL
  • ゾーンの URL
  • ディスクタイプの URL
  • ディスクの users[] リストに記載されたインスタンスの 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 リクエストを発行します。その際、リクエスト本文で targetInstancedestinationZone を指定します。次に例を示します。

{
   "targetInstance": "zones/us-central1-b/instances/example-instance-1",
   "destinationZone": "zones/us-central1-f"
}

インスタンスを手動で移動する

可能であれば、moveInstance API を使用してインスタンスを自動的に移動してください。インスタンスの移動に必要な処理がすべて自動的に行われます。ただし、この API を使用できない場合は、手動での移動が可能です。

次の例は、myrootdiskmydatadisk の 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

インスタンスを別のゾーンに移動するには、次のようにします。

  1. 移動するインスタンスに関連付けられているディスクを特定します。

    [ディスク] ページに移動

    この例では、myinstance インスタンスに次の 2 つのディスクが関連付けられています。

    • myrootdisk というブートディスク
    • mydatadisk というデータディスク
  2. myrootdiskmydatadisk の自動削除の状態を false に設定して、インスタンスの削除時に、これらのディスクが自動削除されないようにします。

    gcloud compute instances set-disk-auto-delete myinstance --zone europe-west1-a \
        --disk myrootdisk --no-auto-delete
    

    状態が更新された場合は、gcloud compute がレスポンス Updated [...] を返します。自動削除の状態がすでに false に設定されている場合は、gcloud compute が次のレスポンスを返します。

    No change requested; skipping update for [myinstance].
  3. (省略可)インスタンスのメタデータを保存します。

    インスタンスを削除するときに、インスタンスのメタデータも削除されます。その情報を別のファイルに保存しておくと、新しいインスタンスにインスタンスのメタデータを再適用できます。

    インスタンスのメタデータを次のように記述します。

    gcloud compute instances describe myinstance --zone europe-west1-a
    

    この内容は別のファイルに保存します。

  4. データのバックアップを作成します。

    予防措置として、インスタンスに永続ディスクが接続している間に、永続ディスクのスナップショットを使用してデータのバックアップを作成します。スナップショットを取得する前に、ディスクバッファをクリアして、スナップショットが永続ディスクの状態と一致するようにします。

    ディスク バッファをクリアした後で、次のようにしてスナップショットを作成します。

    gcloud compute disks snapshot myrootdisk mydatadisk \
        --snapshot-names backup-myrootsnapshot,backup-mydatasnapshot \
        --zone europe-west1-a
    

    スナップショットが作成されたことを確認するには、gcloud compute snapshots list を実行します。

  5. インスタンスを削除します。

    インスタンスを削除すると、完全にシャットダウンされ、永続ディスクの接続が解除されます。

    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」と入力して続行し、警告を無視します。

  6. 次に、ルートディスクとデータディスクの両方について、別のスナップショットを作成します。

    gcloud compute disks snapshot myrootdisk mydatadisk \
        --snapshot-names myrootsnapshot,mydatasnapshot \
        --zone europe-west1-a
    
    Created [.../mydatasnapshot].
    Created [.../myrootsnapshot].
  7. (省略可)永続ディスクを削除します。

    永続ディスクの名前を新しいディスクに再利用する場合は、その名前を解放するために既存のディスクを削除する必要があります。ディスクを削除すると、永続ディスクのストレージ費用も節約できます。

    同じディスク名を再利用する予定がない場合は、永続ディスクを削除できます。

    gcloud compute disks delete myrootdisk mydatadisk --zone europe-west1-a
    
  8. 前のステップで作成したスナップショットから、us-west1-b に新しい永続ディスクを作成します。最初にルートディスクを作成します。

    gcloud compute disks create myrootdiskb --source-snapshot myrootsnapshot \
        --zone us-west1-b
    
    Created [.../myrootdiskb].
    NAME        ZONE           SIZE_GB TYPE        STATUS
    myrootdiskb 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
  9. インスタンスを us-west1-b に再作成します。

    • インスタンスのメタデータをファイル(たとえば、myinstance.describe)に保存することを選択した場合、そのファイルを使用してインスタンスに同じメタデータを設定できます。

    • インスタンスに予約済みの外部 IP アドレスがあった場合、そのアドレスを新しいインスタンスに再度割り当てるには --address ADDRESS オプションを指定します。

    • インスタンスに GPU が含まれていた場合は、--accelerator オプションを使用してインスタンスに GPU を追加します。

    • インスタンスで特定のサブネットを使用する場合、--zone [ZONE_NAME] フラグの前に --subnet [SUBNET_NAME] フラグを追加します。

    その他のフラグの完全なリストについては、gcloud compute instances create コマンドをご覧ください。

    gcloud compute instances create myinstanceb --machine-type n1-standard-4 \
        --zone us-west1-b \
        --disk name=myrootdiskb,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
  10. (省略可)永続ディスクのスナップショットを削除します。

    仮想マシンが移動されたことを確認した後は、作成した一時スナップショットを削除するとストレージ費用を節約できます。

    gcloud compute snapshots delete myrootsnapshot mydatasnapshot
    

    バックアップ スナップショットが不要になった場合は、そのスナップショットも削除します。

    gcloud compute snapshots delete backup-myrootsnapshot backup-mydatasnapshot
    

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント