虛擬設備是包含虛擬機器執行個體的磁碟映像檔和硬體配置的套件。
OVF 格式是一種廣為使用的主流虛擬設備格式。
以 OVF 格式封裝虛擬設備時會產生 OVF 套件。OVF 套件是一個包含 .ovf
描述元檔案的資料夾,及其他資源 (如磁碟) 的集合。OVF 套件封存至單一檔案時稱為 OVA 檔案。
本頁說明如何使用 Compute Engine,從虛擬設備匯入機器映像檔。
事前準備
- 在專案中啟用 VM Migration API。
- 確認開機磁碟已設定支援的作業系統。
支援的檔案格式
您可以使用 Compute Engine 匯入下列格式的機器映像檔:
開放虛擬化格式 (OVF):同一個值區中的一個 OVF 檔案和虛擬機器磁碟 (VMDK) 檔案。
開放式虛擬設備 (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 |
在主專案中,將預設的 Migrate to Virtual Machines 服務帳戶 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 授予儲存匯入映像檔的 bucket 的 roles/storage.objectViewer 角色。這項權限可讓 Migrate to Virtual Machines 存取來源映像檔。 |
VM Migration 管理員 | roles/vmmigration.admin |
在主機專案中,將 roles/vmmigration.admin 角色授予要用於匯入來源映像檔的使用者帳戶。 |
VM 遷移服務帳戶 | roles/vmmigration.serviceAgent |
在目標專案中,將 roles/vmmigration.serviceAgent 角色授予主專案的預設 Migrate to Virtual Machines 服務帳戶 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com )。舉例來說,如果 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」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」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。在目標專案中建立服務帳戶,並授予存取這些服務和 API 的必要權限,然後再建立 Compute Engine 執行個體。然後在此指定該服務帳戶。詳情請參閱「設定 VM 以服務帳戶身分執行」。
如要將服務帳戶附加至 Compute Engine 執行個體,您在 Compute Engine 主機專案中的使用者帳戶必須具備必要權限。詳情請參閱設定目標專案服務帳戶的權限。machineImageTargetDefaults.shielded_instance_config
(選用) 在這個執行個體上啟用 Shielded VM。受防護的 VM 採用了一系列的安全控管機制,有助於抵禦 Rootkit 與 Bootkit 攻擊。請參閱「什麼是 Shielded VM?」一文。 machineImageTargetDefaults.singleRegionStorage
如要將機器映像檔 storageLocations
設為區域,請將此旗標設為 true。如果將這個旗標設為 false,系統會選取最接近的多地區。machineImageTargetDefaults.skip_os_adaptation
如要略過 OS 調整作業,請將此旗標設為 true。
從匯入的機器映像檔建立的 VM 必須變更設定,才能在 Google Cloud上正常運作。這些變更稱為「OS 調整」。Compute Engine 會在匯入機器映像檔的過程中,自動執行 OS 調適作業。詳情請參閱調整 VM 執行個體,以便在 Google Cloud上執行。machineImageTargetDefaults.osAdaptationParameters.licenseType
要用於機器映像檔的授權類型。Compute Engine 支援已部署 VM 的即付即用 (PAYG) 授權和自備授權 (BYOL)。Compute Engine 會根據遷移的作業系統,為遷移的 VM 指派預設授權類型,詳情請參閱「支援的作業系統」。
如果作業系統支援多種授權類型,您可以覆寫預設授權類型,明確指定 PAYG 或 BYOL 授權類型。
machineImageTargetDefaults.osAdaptationParameters.network_interfaces
Compute Engine 可讓您選擇建立具有多個網路介面 (NIC) 的機器映像檔。每個介面都會連接到不同的虛擬私有雲網路,讓該機器映像檔在 gcloud CLI 中存取不同的虛擬私有雲網路。
新增其他網路介面前,請注意下列事項:
- 系統不支援將多個網路介面連結至同一個虛擬私有雲網路。雖然設定可能會儲存,但 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 移轉服務帳戶 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" }