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


使用機器映像檔,為 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.
      3. REST

        如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 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.

        詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

限制和規定

  • 您可以在不同專案之間共用機器映像檔。不過,系統不支援共用虛擬私有雲網路
  • VPC Service Controls 保護的專案不支援這項功能。
  • 如果來源 VM 附加的磁碟大於 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 目錄中名為 my-ova 的來源 OVA 檔案匯入名為 my-machine-image 的機器映像檔,並執行 centos-7

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

REST

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

  2. projects.builds.create 方法發出 POST 要求。

    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:儲存在 Cloud Storage 中的 OVA 檔案 URI,或包含 OVF 套件的目錄。例如: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 標記

後續步驟