匯入虛擬設備


虛擬設備是包含虛擬機器 (VM) 執行個體的磁碟映像檔和硬體配置的套件。

OVF 格式是一種廣為使用的主流虛擬設備格式。以 OVF 格式封裝虛擬設備時會產生 OVF 套件。OVF 套件是一個包含 .ovf 描述元檔案的資料夾,及其他資源 (如磁碟) 的集合。OVF 套件封存至單一檔案時稱為 OVA 檔案。

本頁說明如何使用 Compute Engine,從虛擬機器匯入機器映像檔。

事前準備

支援的檔案格式

您可以使用 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 機器映像檔,請按照下列步驟操作:

  1. 準備要匯入的機器映像檔
  2. 選擇目標專案
  3. 將機器映像檔匯入 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。如需支援的地區清單,請參閱「地區和區域」。

詳情請參閱 gcloud migration vms machine-image-imports

REST API

如要使用 REST API 將機器映像檔匯入至 Compute Engine,請按照下列步驟操作。

  1. 使用以下要求建立機器映像匯入資源。

    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-clonecut-over 在建立的執行個體上新增或移除網路介面。您可以重複執行 test-clonecut-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"
      }
    }
    
  2. 使用下列指令輪詢作業,檢查機器映像檔匯入工作是否已完成。

    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"
        }
      }
    
  3. 使用下列指令監控機器映像檔匯入工作的完成情形。

    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"
    }
    

後續步驟