虛擬設備是包含虛擬機器 (VM) 執行個體的磁碟映像檔和硬體配置的套件。
OVF 格式是一種廣為使用的主流虛擬設備格式。以 OVF 格式封裝虛擬設備時會產生 OVF 套件。OVF 套件是一個包含 .ovf
描述元檔案的資料夾,及其他資源 (如磁碟) 的集合。OVF 套件封存至單一檔案時稱為 OVA 檔案。
本頁說明如何使用 Compute Engine,從虛擬機器匯入機器映像檔。
事前準備
- 在專案中啟用 VM Migration API。
- 請確認開機磁碟已設定為支援的作業系統。
支援的檔案格式
您可以使用 Compute Engine 匯入下列格式的機器映像檔:
開放虛擬機格式 (OVF):同一個儲存桶中包含一個 OVF 檔案和虛擬機器磁碟 (VMDK) 檔案。
Open Virtual Appliance (OVA):一個 OVA 檔案,內含 OVF 檔案和磁碟檔案。Compute Engine 支援以下列磁碟檔案格式匯入 OVA 機器映像檔:
- 虛擬機器磁碟 (VMDK)
- QEMU 寫入時複製 (QCOW)
- QEMU 寫入時複製 2 (QCOW2)
- QEMU 強化磁碟格式 (QED)
- 虛擬私有雲
- 虛擬磁碟映像檔 (VDI)
- 虛擬硬碟 v2 (VHDX)
限制
匯入機器映像檔時,請注意下列限制:
- 您無法將機器映像檔匯入第 4 代機器系列,因為這類機器不支援 Google Cloud Hyperdisk 磁碟區。
- 您無法匯入以 Arm 架構為基礎的機器映像檔。
- 您無法使用下列任何來源 VM 建立機器映像檔:
- 已連接的磁碟大於 200 TB
- A4、A3、C3D、H3 或 Z3 機型
機器映像檔匯入程序
如要使用 Compute Engine 將機器映像檔匯入至 Compute Engine 機器映像檔,請按照下列步驟操作:
準備要匯入的機器檔案
如要將機器映像檔匯入 Compute Engine 映像檔,您必須先準備要匯入的機器映像檔。下列各節將詳細討論這些工作。
將機器映像檔案新增至 Cloud Storage
如要將機器映像檔匯入 Compute Engine 機器映像檔,您必須先將機器映像檔檔案新增至 Cloud Storage。詳情請參閱「從檔案系統上傳物件」一文。為提升效能,建議您將機器映像檔檔案上傳至要建立機器映像檔的 Google Cloud 中。
授予必要權限
如要將機器人映像檔匯入 Compute Engine 機器人映像檔,請授予下表所述的權限。
角色 | 必要權限 | 說明 |
---|---|---|
Storage 物件檢視者 | roles/storage.objectViewer |
請將主機專案 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 中的預設 Migrate to Virtual Machines 服務帳戶,授予要匯入映像檔的儲存桶中的 roles/storage.objectViewer 角色。這個權限可讓 Migrate to Virtual Machines 存取來源映像檔。 |
VM Migration 管理員 | roles/vmmigration.admin |
在主機專案中,將 roles/vmmigration.admin 角色授予您要用來匯入來源圖片的使用者帳戶。 |
VM Migration 服務帳戶 | roles/vmmigration.serviceAgent |
將主機專案 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 中的預設 Migrate to Virtual Machines 服務帳戶授予目標專案的 roles/vmmigration.serviceAgent 角色。舉例來說,如果 service-1234567890@gcp-sa-vmmigration.iam.gserviceaccount.com 是主機專案中的 Migrate to Virtual Machines 服務帳戶,您必須將 roles/vmmigration.serviceAgent 角色授予此服務帳戶,才能在目標專案中建立映像檔。 |
選擇目標專案
如要代管機器映像檔,您必須建立或選擇目標專案。目標專案會定義機器映像檔的目的地專案。如要進一步瞭解如何建立或選擇目標專案,請參閱「新增目標專案」一文。
將機器映像檔匯入至 Compute Engine
您可以使用 Google Cloud CLI 或 REST API 指令,將機器映像檔匯入 Compute Engine。
匯入機器映像檔時,Compute Engine 會在目標專案中建立一些暫時資源,例如 VM 或磁碟。機器映像檔匯入程序完成後,這些暫時性資源就會刪除。
gcloud
如要使用 Google Cloud CLI 將機器映像檔匯入至 Compute Engine,請使用下列要求。
gcloud alpha migration vms machine-image-imports create IMAGE_NAME \ --source-file=SOURCE_FILE \ --location=REGION_ID \ --target-project=projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT
更改下列內容:
IMAGE_NAME
:您要建立的機器映像檔名稱。如要進一步瞭解命名規則,請參閱命名慣例。SOURCE_FILE
:您要從中匯入機器映像檔的檔案。請以 gs://bucket/folder/file 的格式輸入路徑。如要取得 bucket 內物件的路徑,請參閱「查看物件中繼資料」一文。請注意,您只能從.ovf
和.ova
檔案匯入圖片。REGION_ID
:您要執行機器人圖像匯入程序的地區。系統會在最近的多地區建立機器映像檔。如果您想在區域中建立機器映像檔,請務必將singleRegionStorage
設為 true。如需支援的地區清單,請參閱「地區和區域」。HOST_PROJECT_ID
:要從中遷移機器映像檔的主機專案名稱。TARGET_PROJECT
:您要建立機器映像檔的目標專案。如果您尚未新增目標專案,請按照「新增目標專案」一節的操作說明進行。REGION_ID
:您要執行機器人圖像匯入程序的地區。系統會在最近的多地區建立機器映像檔。如果您想在區域中建立機器映像檔,請務必將singleRegionStorage
設為 true。如需支援的地區清單,請參閱「地區和區域」。
REST API
如要使用 REST API 將機器映像檔匯入至 Compute Engine,請按照下列步驟操作。
使用以下要求建立機器映像匯入資源。
POST https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/imageImports?imageImportId=IMPORT_NAME { "cloudStorageUri": "SOURCE_FILE", "machineImageTargetDefaults": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT", ... } }
更改下列內容:
HOST_PROJECT_ID
:要從中遷移機器映像檔的主機專案名稱。REGION_ID
:您要執行機器映像匯入程序的區域。機器映像檔會在最近的多區域中建立。如果您希望在區域中建立機器映像檔,請務必將singleRegionStorage
設為 true。如需支援的地區清單,請參閱「地區和區域」。SOURCE_FILE
:您要從中匯入機器映像檔的檔案。請以 gs://bucket/folder/file 的格式輸入路徑。如要取得 bucket 內物件的路徑,請參閱「查看物件中繼資料」一文。請注意,您只能從.ova
和.ovf
檔案匯入機器映像檔。IMAGE_NAME
:您要建立的機器映像檔名稱。如要進一步瞭解命名規則,請參閱命名慣例。TARGET_PROJECT
:您要建立機器映像檔的目標專案。如果您尚未新增目標專案,請按照「新增目標專案」一節的操作說明進行。
在這個範例中,
IMPORT_NAME
是代表機器映像檔匯入資源的 ID。將機器映像檔匯入 Compute Engine 時,Migrate to Virtual Machines 會先建立機器映像檔匯入資源。機器映像檔匯入資源代表機器映像檔匯入程序。您可以使用IMPORT_NAME
取得機器映像檔匯入程序中匯入的機器映像檔連結。如需機器映像檔匯入建立要求欄位支援的欄位完整清單,請參閱下表。
欄位名稱 說明 cloudStorageUri
您要匯入機器映像檔的檔案路徑。請以 gs://bucket/folder/file 的格式輸入路徑。如要取得 bucket 內物件的路徑,請參閱「查看物件中繼資料」。
請注意,您只能從.ovf
和.ova
檔案匯入機器映像檔。machineImageTargetDefaults.targetProject
您要建立機器映像檔的目標專案。詳情請參閱目標專案 API 參考資料。例如:
projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT
在範例中,請替換下列項目:HOST_PROJECT_ID
:要從中遷移機器映像檔的主機專案名稱。TARGET_PROJECT
:您要建立圖片的目標專案。
machineImageTargetDefaults.machine_image_name
要建立的機器映像檔名稱。如要進一步瞭解命名規則,請參閱「資源命名慣例」。 machineImageTargetDefaults.description
(選用) 機器映像檔的說明。 machineImageTargetDefaults.machine_type
(選用) 用來建立機器映像檔的機器。如果您未指定機器類型,Compute Engine 會根據來源機器映像檔的資訊,選擇相關的機器類型。 machineImageTargetDefaults.labels
如要整理專案,請以鍵/值組合的形式為資源新增標籤。請參閱「標示資源」。 machineImageTargetDefaults.tags
新增要附加至機器映像檔的任何標記。請參閱管理資源標記。 machineImageTargetDefaults.additionalLicenses
您最多可在使用有效網址格式匯入的機器映像檔所建立的 VM 執行個體中,新增 10 個額外授權。舉例來說,您可以使用下列網址格式新增其他授權:
https://www.googleapis.com/compute/beta/projects/windows-sql-cloud/global/licenses/sql-server-2012-enterprise
machineImageTargetDefaults.service_account
指定機器映像檔使用的目標專案服務帳戶。根據預設,系統不會將任何服務帳戶指派給機器映像檔。
如果您從機器映像檔建立 Compute Engine 執行個體,並打算在該執行個體上執行應用程式,則該執行個體可能需要存取其他 gcloud CLI 服務和 API。在建立 Compute Engine 執行個體之前,請在目標專案中建立服務帳戶,並授予存取這些服務和 API 的必要權限。然後在此指定該服務帳戶。詳情請參閱「設定 VM 以服務帳戶身分執行」。
如要將服務帳戶連結至 Compute Engine 執行個體,您在 Compute Engine 主機專案中的使用者帳戶必須具備必要的權限。詳情請參閱「在目標專案服務帳戶上設定權限」。machineImageTargetDefaults.shielded_instance_config
(選用) 在這個執行個體上啟用受防護的 VM。受防護的 VM 是由一組安全控管機制強化,有助於抵禦 rootkit 與 bootkit 攻擊。請參閱「什麼是受防護的 VM?」 machineImageTargetDefaults.singleRegionStorage
如果您希望機器映像檔 storageLocations
為區域,請將此旗標設為 true。如果將這個標記設為 false,系統會選取最近的多地區。machineImageTargetDefaults.skip_os_adaptation
如果您想略過 OS 調整,請將此標記設為 true。
為了讓 VM 在 Google Cloud上正常運作,您必須調整從匯入的機器映像檔建立的 VM 設定。這些變更稱為「OS 調整」。Compute Engine 會在機器映像檔匯入程序中自動執行 OS 調整作業。詳情請參閱「將 VM 執行個體調整為在 Google Cloud上執行」。machineImageTargetDefaults.osAdaptationParameters.licenseType
要用於機器映像檔的授權類型。Compute Engine 支援即付即用 (PAYG) 授權,並可為已部署的 VM 提供自備授權 (BYOL)。遷移 VM 的預設授權類型是由 Compute Engine 根據遷移的作業系統指派,詳情請參閱「支援的作業系統」一文。
如果作業系統支援多種授權類型,您可以覆寫預設授權類型,明確指定 PAYG 或 BYOL 授權類型。
machineImageTargetDefaults.osAdaptationParameters.network_interfaces
您可以選擇在 Compute Engine 中建立具有多個網路介面 (NIC) 的機器映像檔。每個介面都會連接至不同的虛擬私有雲網路,讓該機器映像檔可存取 gcloud CLI 中的不同虛擬私有雲網路。
新增其他網路介面前,請注意下列事項:
- 系統不支援將多個網路介面連結至同一個 VPC 網路。雖然設定可能會儲存,但 VM 的例項化會失敗。
- 從機器映像檔例項化 Compute Engine 執行個體後,您就無法使用
test-clone
或cut-over
在建立的執行個體上新增或移除網路介面。您可以重複執行test-clone
或cut-over
,並使用不同的目標詳細資料重新建立執行個體。
如要新增或移除網路介面: - 選取「新增網路介面」,即可在 Compute Engine 執行個體中新增額外的網路介面。您可以設定與初始網路介面相同的所有選項。
machineImageTargetDefaults.osAdaptationParameters.generalize
如果要將機器映像檔泛用化,請將此旗標設為 true。
使用機器映像檔建立執行個體時,Windows 會在執行個體中加入一些專屬資訊。一般化是移除這類資訊的程序,可讓您從相同機器映像檔建立多個執行個體。machineImageTargetDefaults.encryption
您要在匯入程序中用來加密資料的 Google-owned and Google-managed encryption key 。詳情請參閱「預設靜態資料加密」。
使用客戶自行管理的加密金鑰 (CMEK) 加密機器映像檔的資料。這些加密金鑰是由您建立、管理及擁有。詳情請參閱「使用 Cloud KMS 金鑰保護資源」一文。
新增 CMEK 時,您必須授予下表所述的權限。角色 必要權限 說明 Cloud VM Migration Service 帳戶 roles/vmmigration.serviceAgent 將此權限授予 Compute Engine 服務帳戶,以便在匯入程序中建立的機器映像檔加密資料。 Compute Engine 服務代理人 roles/compute.serviceAgent 授予 Compute Engine 服務代理這個權限,以便在匯入程序中加密資料。 畫面會顯示類似以下的回應。
{ "name": "projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID", "metadata": { "createTime": "2023-10-31T09:12:26.94928636Z", "target": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "verb": "create", "apiVersion": "v1", "@type": "type.googleapis.com/google.cloud.vmmigration.v1.OperationMetadata" } }
使用下列指令輪詢作業,檢查機器映像檔匯入工作是否已完成。
GET https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID
更改下列內容:
HOST_PROJECT_ID
:您要從中遷移機器映像檔的主機專案名稱。REGION_ID
:您要執行機器映像匯入程序的區域。機器映像檔會在最近的多區域中建立。如果您希望在區域中建立機器映像檔,請務必將singleRegionStorage
設為 true。如需支援的地區清單,請參閱「地區和區域」。OPERATION_ID
:遷移工作的作業 ID。
您應該會看到類似下列範例回應的作業完成回應。
{ "done": true, "name": "projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID", "response": { "@type": "type.googleapis.com/google.cloud.vmmigration.v1.ImageImport", "name": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "cloudStorageUri": "SOURCE_FILE", "createTime": "2023-10-31T09:04:04.413664947Z", "machineImageTargetDefaults": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "recentImageImportJobs": [ { "name": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME/imageImportJobs/image-import-job", "diskImageTargetDetails": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "state": "PENDING" } ] }, "metadata": { "createTime": "2023-10-31T09:04:04.416740716Z", "endTime": "2023-10-31T09:05:36.79987142Z", "target": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "verb": "create", "apiVersion": "v1", "@type": "type.googleapis.com/google.cloud.vmmigration.v1.OperationMetadata" } }
使用下列指令監控機器映像檔匯入工作的完成情形。
GET https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/imageImports/IMPORT_NAME/imageImportJobs/image-import-job
更改下列內容:
HOST_PROJECT_ID
:您要從中遷移機器映像檔的主機專案名稱。REGION_ID
:您要執行機器映像匯入程序的區域。機器映像檔會在最近的多區域中建立。如果您希望在區域中建立機器映像檔,請務必將singleRegionStorage
設為 true。如需支援的地區清單,請參閱「地區和區域」。IMPORT_NAME
:代表機器映像檔匯入資源的 ID。將機器映像檔匯入 Compute Engine 時,Migrate to Virtual Machines 會先建立機器映像檔匯入資源。機器映像檔匯入資源代表機器映像檔匯入程序。您可以使用IMPORT_NAME
取得機器映像檔匯入程序中匯入的機器映像檔連結。
您應該會看到類似下列範例回應的工作完成回應。
{ "createTime":"2023-10-31T09:12:27.053788394Z", "createdResources":[ "https://www.googleapis.com/compute/v1/projects/USER_PROJECT/global/images/IMAGE_NAME" ], "diskImageTargetDetails": { "imageName":"IMAGE_NAME", "targetProject":"projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "endTime":"2023-10-31T09:16:50.224865783Z", "name":"projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME/imageImportJobs/image-import-job", "state":"SUCCEEDED" }