本頁說明如何將 VM 執行個體從一個網路遷移至另一個網路。如果 VM 使用多個網路介面連線至多個網路,這個程序會更新其中一個介面,並保留其餘介面。
系統支援下列遷移作業:
- 從舊版網路遷移至同一專案中的虛擬私有雲網路
- 從一個虛擬私有雲網路連線至同一專案中的另一個虛擬私有雲網路
- 從虛擬私有雲網路的一個子網路連線至同一網路的另一個子網路
- 從服務專案網路到共用虛擬私有雲主專案的共用網路
無論如何,VM 都會留在原本的區域和可用區。只有附加的網路會變更。
事前準備
- 參閱虛擬私有雲說明文件。
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
需求條件
遷移 VM 前,請確認 VM 符合下列條件:
- VM 必須停止運作。為確保 VM 中的客體 OS 能在停止作業完成前正常關機,您可以選擇在 VM 中啟用正常關機。
- VM 不得屬於執行個體群組或網路端點群組 (NEG)。申請條件如下:
- 如果 VM 屬於非代管執行個體群組或 NEG,您必須先從群組中移除 VM,才能遷移 VM。
- 如果 VM 屬於代管執行個體群組 (MIG),則無法遷移。請改為使用具有不同 VM 屬性的執行個體範本,建立新的 MIG。
- 您可以移動目標集區中的執行個體,不必先移除。目標集區會擴大,涵蓋這兩個聯播網。
限制
- 您無法將 VM 介面遷移至舊版網路。
- 遷移期間,系統會變更分配給網路介面的 MAC 位址。這可能會影響與 MAC 位址緊密相關的服務,例如第三方授權協議。
- 如果將 VM 遷移至 IP 範圍不同的網路或子網路,執行個體的內部 IP 位址就必須變更。如果遷移至 IP 範圍相同的子網路,只要舊 IP 位址未在目的地使用,您就可以在遷移期間指定該位址,藉此保留舊 IP 位址。
- 如果目標子網路的 IP 範圍與來源不同,介面的 IP 位址會變更,以符合新的子網路範圍。
- 您可以在新位置保留 VM 現有的外部 IP 位址。如要這麼做,您必須具備目標網路的
compute.subnetworks.useExternalIp
權限,且目標網路不得透過 constraints/compute.vmExternalIpAccess 限制停用外部 IP 位址。
遷移 VM
Google 建議您先在新網路中建立必要的防火牆規則、路徑、負載平衡器和其他網路基礎架構資源,再遷移 VM。這麼做可以縮短 VM 離線時間。
如要遷移 VM,請選取下列任一選項:
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下 VM 執行個體名稱,開啟詳細資料頁面。
如果 VM 正在執行,請按一下「停止」
停止 VM。如果沒有「停止」選項,請依序點選 「更多動作」> 「停止」。VM 停止後,請按一下「編輯」
。在「Network interfaces」(網路介面) 下方,按一下要移動的介面。
在介面的「Network」(網路) 欄位中,選取介面的新網路。
在介面的「Subnetwork」(子網路) 欄位中,選取介面的新子網路。
在「內部 IP 位址」欄位中,如要讓系統從子網路範圍分配 IP 位址,請指定「自動」;如要自行指定未使用的 IP 位址,請指定「自訂」。
按一下「Done」(完成),關閉網路介面編輯面板。
按一下 [儲存]。
VM 儲存完畢後,按一下「Start」(啟動)
。如果出現確認對話方塊,請按一下「開始」。
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 是您要更新的介面名稱。在單一介面 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://compute.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://compute.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 是您要更新的介面名稱。在單一介面 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 位址。如果省略這個欄位,系統會自動指派介面。
- 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 的狀態。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-31 (世界標準時間)。
-