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

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

インスタンスを移動するには、次の手順に従う必要があります。

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

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

始める前に

要件

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

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

手動による移動と自動移動の選択

手動による移動とは、projects.moveInstances API を使用するのではなく、前述の手順のそれぞれを手動で行うことを意味します。作業を軽減するには、できるだけ moveInstances API を使用すべきですが、moveInstances API を使用するという方法を選択できないシナリオもあります。具体的には、次のシナリオです。

  • インスタンスをリージョン間で移動する場合(us-west1-a から asia-south1-b に移動する場合など)、VM がサブネットワークに属しているときは、手動による移動を行って、インスタンスに新しいサブネットワークを選択する必要があります。
  • インスタンスに GPU またはローカル SSU が接続されている場合も、手動で移動する必要があります。

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

インスタンスを移動するには、事前に要件を確認します。

gcloud


インスタンスが稼働中であることを確認します。その上で、gcloudcompute instances move サブコマンドを使用してインスタンスを移動します。

たとえば、現在 us-central1-b で稼働中の example-instance-1 というインスタンスを、そのインスタンスに接続されているすべての永続ディスクと一緒に us-central1-f に移動するには、次のコマンドを実行します。

gcloud compute instances move example-instance \
    --zone us-central1-a --destination-zone us-central1-f

このオペレーションは完了するまでに数分かかることがあります。

API

API では、リクエスト本文に targetInstance および destinationZone を組み込んで moveInstance に対して POST リクエストを行います。次に例を示します。

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

手動によるインスタンスの移動

moveInstance API はインスタンスの移動に伴うすべてのタスクを自動的に処理するため、可能な場合は常に、インスタンスの自動移動を行います。ただし、一部の制約によってこの API を使用できない場合があります。その場合は、手動で移動できます。次のいずれかに該当する場合は、インスタンスを手動で移動します。

  • VM が RUNNING ではない。
  • VM を別のリージョンに移動する際に、VM がサブネットワークに属している。
  • インスタンスに GPU またはローカル SSD が接続されている。

次の例は、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 が空のレスポンスを返します。

  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. Attached disks configured to
     be auto-deleted will be deleted unless they are attached to any other
     instances. 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 ドキュメント