從虛擬設備匯入機器映像檔


使用機器映像檔,為 Compute Engine 中運作的 VM 執行個體儲存一或多個磁碟中的所有設定、中繼資料、權限和資料。如要瞭解使用機器映像檔的時間和方式,請參閱「機器映像檔」。

本文說明從虛擬設備匯入機器映像檔的步驟。

事前準備

  • 如果您要匯入機器映像檔的專案已定義可信映像檔政策,請將 projects/compute-image-importprojects/compute-image-tools 新增至發布者的許可清單。
  • 如果您要從其他專案匯入虛擬設備,請參閱「跨專案匯入」一文。
  • 請參閱匯入虛擬設備的 Compute Engine 指南,瞭解來源 VM 和 OVF 檔案需求
  • 如要瞭解如何在匯入機器映像檔前符合相關規定,請參閱「匯入及匯出 VM 映像檔的先決條件」一文。
  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

限制和規定

  • 您可以跨專案共用機器映像檔。不過,系統不支援共用虛擬私有雲網路
  • 這項功能不適用於以 VPC Service Controls 保護的專案。
  • 無法使用附加磁碟超過 200 TB 的來源 VM 建立機器映像檔。

支援的作業系統

如要瞭解作業系統支援資訊,請參閱「作業系統詳細資料」。

匯入機器映像檔

您可以使用 Google Cloud CLICloud Build API,從虛擬設備匯入機器映像檔。

gcloud

使用 gcloud compute machine-images import 指令,從虛擬設備匯入機器映像檔。

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:SOURCE_URI \
    --os=OS

更改下列內容:

  • MACHINE_IMAGE_NAME:您要匯入的機器映像檔名稱。
  • SOURCE_URI:Cloud Storage 中 OVA 或 OVF 檔案的路徑。
  • OS:OVA 檔案的作業系統。這個標記預設為選用,但在某些情況下可能會需要。建議您提供這項旗標。

示例

舉例來說,您可以使用下列 gcloud 指令,從儲存在 gs://my-bucket 目錄中並執行 centos-7 的來源 OVA 檔案 my-ova,匯入名為 my-machine-image 的機器映像檔:

gcloud compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

REST

  1. 將虛擬設備上傳至 Cloud Storage

  2. POST 要求傳送至 projects.builds.create 方法

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-machine-image-name=MACHINE_IMAGE_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":"gce-ovf-machine-image-import"
    }
    

    更改下列內容:

    • PROJECT_ID:要匯入 OVA 檔案的專案 ID。
    • MACHINE_IMAGE_NAME:要匯入的機器映像檔名稱。例如:my-machine-image
    • SOURCE_URI:OVA 檔案或包含 OVF 套件的目錄的 URI,這些檔案或目錄儲存在 Cloud Storage 中。例如:gs://my-bucket/my-instance.ova
    • OS:OVA 檔案的作業系統。例如:ubuntu-1604。這個標記預設為選用,但在某些情況下可能會需要。建議您提供這個標記。

    如要瞭解可提供的其他 args 值,請參閱 Compute Engine OVF 匯入作業 GitHub 頁面中的選用標記部分。

使用 OVF 覆寫值匯入機器映像檔

從虛擬設備匯入機器映像檔時,您可以覆寫 OVF 檔案中的設定。例如,您可以變更 CPU 或記憶體設定,也可以使用自訂網路。

自訂 CPU 和記憶體

如要覆寫 OVF 檔案中指定的 CPU 或記憶體配置,請完成下列步驟:

gcloud

如要覆寫 OVF 檔案中指定的 CPU 或記憶體配置,請按照 Google Cloud CLI 的步驟匯入機器映像檔,並指定 --custom-cpu--custom-memory 標記。

示例

名為 my-machine-image 的機器映像檔會將下列覆寫值套用至 OVF 檔案中的設定:

  • 作業系統:Ubuntu 1404
  • CPU:2 CPUs
  • 記憶體:2048 MB

如要匯入含有這些覆寫值的 my-machine-image,請執行下列指令:

gcloud compute machine-images import my-machine-image \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

REST

如要覆寫 OVF 檔案中指定的 CPU 或記憶體配置,請按照 Compute Engine API 步驟匯入機器映像檔,並指定 -machine-type 引數。這個 -machine-type 代表要使用的預先定義或 N1 系列自訂機器類型。

示例

my-project 專案中名為 my-machine-image 的機器映像檔,在 OVF 檔案中套用了下列覆寫值:

  • 作業系統:Ubuntu 1404
  • CPU:2 CPUs
  • 記憶體:2048 MB

如要匯入含有這些覆寫值的 my-machine-image,請向 Cloud Build API 提出以下要求。

POST https://cloudbuild.googleapis.com/v1/projects/my-project/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

自訂網路

如要覆寫 OVF 檔案中指定的網路設定,請完成下列步驟:

gcloud

如要設定自訂網路,請按照 Google Cloud CLI 的步驟匯入機器映像檔,並指定 --network 旗標。如果網路設定為自訂子網路模式,也須指定 --subnet--zone 標記。

示例

名為 my-machine-image 的機器映像檔會將下列覆寫值套用至 OVF 檔案中的設定:

  • 作業系統:Ubuntu 1404
  • 網路:custom-vpc-network
  • 子網路:company-vpc-us-east1-c
  • 可用區:us-east1-c

如要匯入含有這些覆寫值的 my-machine-image,請執行下列範例指令:

gcloud compute machine-images import my-machine-image \
    --os=ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network=custom-vpc-network \
    --subnet=company-vpc-us-east1-c \
    --zone=us-east1-c

REST

如要使用自訂網路,請按照 REST 步驟匯入機器映像檔,並指定 -network 引數。如果網路設定為自訂子網路模式,也須指定 -subnet-zone 引數。

示例

名為 my-machine-image 的機器映像檔會將下列覆寫值套用至 OVF 檔案中的設定:

  • 作業系統:Ubuntu 1404
  • 網路:custom-vpc-network
  • 子網路:company-vpc-us-east1-c
  • 可用區:us-central1-c

如要匯入含有這些覆寫值的 my-machine-image,請向 Compute Engine API 提出下列要求。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUsILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

PROJECT_ID 替換為您的專案 ID。

在禁止外部 IP 的網路中匯入機器映像檔

如要使用不允許外部 IP 位址的網路匯入機器映像檔,請完成下列步驟:

  1. 將虛擬設備新增至 Cloud Storage

  2. 匯入程序要求在機器映像檔的作業系統上安裝套件管理工具。這些套件管理工具可能需要向外部 Google Cloud的套件存放區提出要求。如要允許這些更新,您必須設定 Cloud NAT。詳情請參閱「使用 Cloud Router 建立 NAT 設定」。

  3. 設定私人 Google 存取權。詳情請參閱「設定私人 Google 存取權」。

  4. 使用 Google Cloud CLI 或 Cloud Build API 匯入機器映像檔。

    從虛擬設備匯入機器映像檔時,系統會在專案中建立臨時 VM。為確保系統不會為這些暫時性 VM 指派外部 IP 位址,您必須指定額外的標記或引數。

    如要進一步瞭解必要標記或引數,請按一下下列分頁:

gcloud

使用 gcloud compute machine-images import 指令,並加上 --no-address 旗標。

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=SOURCE_URI \
    --os=OS \
    --zone=ZONE \
    --no-address

更改下列內容:

  • MACHINE_IMAGE_NAME:您要匯入的機器映像檔名稱。
  • SOURCE_URI:Cloud Storage 中 OVA 或 OVF 檔案的 URI。例如:gs://my-bucket/Ubuntu.ova
  • OS:OVA 檔案的作業系統。這個標記預設為選用,但在某些情況下可能會需要。建議您提供這項旗標。如需支援的值清單,請參閱 gcloud compute machine-images import 指令的 --os 標記選項。
  • ZONE:匯入機器映像檔的區域。如果留空,系統會使用專案的預設時區。

REST

使用 Cloud Build API,將 POST 要求傳送至 projects.builds.create 方法。指定 -no-external-ip 引數。

 POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
 {
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=MACHINE_IMAGE_NAME",
        "-ovf-gcs-path=SOURCE_URI",
        "-os=OS",
        "-zone=ZONE",
        "-no-external-ip",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

更改下列內容:

  • PROJECT_ID:您要匯入機器映像檔的專案 ID。
  • MACHINE_IMAGE_NAME:要匯入的機器映像檔名稱。例如:my-machine-image
  • SOURCE_URI:儲存在 Cloud Storage 中的 OVA 檔案 URI。例如:gs://my-bucket/my-machine.ova
  • OS:OVA 檔案的作業系統。例如:ubuntu-1604。這個標記預設為選用,但在某些情況下可能會需要。建議您提供這個標記。如需支援的值清單,請參閱 gcloud compute instances import 指令的 --os 標記選項。
  • ZONE:匯入機器映像檔的區域

使用自訂服務帳戶匯入機器映像檔

在機器映像檔匯入期間,系統會在專案中建立暫時性的虛擬機器 (VM) 執行個體。這些暫時性 VM 中的匯入工具必須經過驗證。

服務帳戶是指附加至 VM 的身分。您可以透過 VM 中繼資料伺服器存取服務帳戶存取權憑證,並用於驗證 VM 上的匯入工具。

根據預設,匯入程序會使用預設的 Compute Engine 服務帳戶。不過,如果您的專案已停用預設的 Compute Engine 服務帳戶,或是您想使用自訂的 Compute Engine 服務帳戶,則必須建立服務帳戶,並在匯入程序中指定該帳戶。

gcloud

  1. 將虛擬設備新增至 Cloud Storage

  2. 建立服務帳戶並指派最低角色。如要進一步瞭解如何建立服務帳戶,請參閱「建立及管理服務帳戶」。

    指定的 Compute Engine 服務帳戶至少需要指派下列角色:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    這些最低角色是為 --compute-service-account 標記指定的服務帳戶所需。詳情請參閱「為 Compute Engine 服務帳戶授予必要角色」。

  3. 使用 gcloud compute machine-images import 指令,從虛擬設備匯入機器映像檔。

    gcloud compute machine-images import MACHINE_IMAGE_NAME \
        --source-uri=gs:SOURCE_URI \
        --os=OS \
        --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --scopes=SCOPES
    

    更改下列內容:

    • MACHINE_IMAGE_NAME:您要匯入的機器映像檔名稱。
    • SOURCE_URI:Cloud Storage 中 OVA 或 OVF 檔案的路徑。
    • OS:OVA 檔案的作業系統。這個標記預設為選用,但在某些情況下可能會需要。建議您提供這項旗標。
    • TEMP_SERVICE_ACCOUNT_EMAIL:與上一個步驟中建立的自訂服務帳戶相關聯的電子郵件地址。這個服務帳戶會由臨時 VM 使用。如未指定,VM 會使用預設的 Compute Engine 服務帳戶。
    • SERVICE_ACCOUNT_EMAIL:與自訂服務帳戶相關聯的電子郵件地址,該帳戶會附加至透過此機器映像檔建立的任何 VM。這個服務帳戶沒有權限限制,您可以視需要自訂這個服務帳戶。如未指定,系統會將預設的 Compute Engine 服務帳戶連結至 VM。
    • SCOPES:指定 --service-account 選項的存取層級。如未指定,系統會使用預設範圍。詳情請參閱 --scopes 標記

REST

  1. 將虛擬設備新增至 Cloud Storage

  2. 建立服務帳戶並指派最低角色。如要進一步瞭解如何建立服務帳戶,請參閱「建立服務帳戶」。

    指定的 Compute Engine 服務帳戶至少需要指派下列角色:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    這些最低角色是為 -compute-service-account 引數指定的服務帳戶所需的角色。詳情請參閱「為 Compute Engine 服務帳戶授予必要角色」。

  3. 使用 Cloud Build API 將 POST 要求傳送至 projects.builds.create 方法

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
    "timeout":"7200s",
    "steps":[
      {
        "args":[
          "-machine-image-name=MACHINE_IMAGE_NAME",
          "-ovf-gcs-path=SOURCE_URI",
          "-os=OS",
          "-zone=ZONE",
          "-compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL",
          "-service-account=SERVICE_ACCOUNT_EMAIL",
          "-client-id=api",
          "-timeout=7000s"
        ],
        "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
        "env":[
          "BUILD_ID=$BUILD_ID"
        ]
      }
    ],
    "tags":"gce-ovf-machine-image-import"
    }
    

    更改下列內容:

    • PROJECT_ID:您要匯入機器映像檔的專案 ID。
    • MACHINE_IMAGE_NAME:要匯入的機器映像檔名稱。例如:my-machine-image
    • SOURCE_URI:儲存在 Cloud Storage 中的 OVA 檔案 URI。例如:gs://my-bucket/my-machine.ova
    • OS:OVA 檔案的作業系統。例如:ubuntu-1604。這個標記預設為選用,但在某些情況下可能會需要。建議您提供這個標記。如需支援的值清單,請參閱 gcloud compute instances import 指令的 --os 標記選項。
    • ZONE:匯入機器映像檔的區域
    • TEMP_SERVICE_ACCOUNT_EMAIL:與上一個步驟中建立的自訂服務帳戶相關聯的電子郵件地址。這個服務帳戶會由臨時 VM 使用。如未指定,VM 會使用預設的 Compute Engine 服務帳戶。
    • SERVICE_ACCOUNT_EMAIL:與自訂服務帳戶相關聯的電子郵件地址,該帳戶會附加至透過此機器映像檔建立的任何 VM。這個服務帳戶沒有權限限制,您可以視需要自訂這個服務帳戶。如未指定,系統會將預設的 Compute Engine 服務帳戶連結至 VM。
    • SCOPES:指定 --service-account 選項的存取層級。如未指定,系統會使用預設範圍。詳情請參閱 --scopes 標記

後續步驟