建立機器映像檔後,您可以使用該映像檔複製來源 Compute Engine 執行個體。如要進一步瞭解機器映像檔的用途,請參閱何時使用機器映像檔。
機器映像檔包含複製執行個體所需的大部分資訊和資料。
機器映像檔無法變更。不過,您可以覆寫機器映像檔的幾乎所有屬性,以便從機器映像檔建立執行個體。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST,從機器映像檔建立執行個體。
事前準備
-
如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
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.
- 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.
-
必要的角色
如要取得從機器映像檔建立 Compute Engine 執行個體所需的權限,請要求管理員為您授予 Compute 執行個體或專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
限制
從機器映像檔建立執行個體時,適用下列限制:
在 60 分鐘內,您最多只能從來源機器映像檔建立 6 個執行個體。如果超出此限制,執行個體建立作業就會失敗,並傳回類似以下的錯誤:
Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'. Too frequent operations from the source resource.
如要建立的執行個體數量超過定義的限制 (60 分鐘內為 6 個執行個體),請從來源執行個體建立其他機器映像檔,或從新執行個體建立短效機器映像檔。接著,您可以從新的機器映像檔建立所需數量的執行個體。
您無法使用 Google Cloud 控制台,從附加區域磁碟的機器映像檔建立執行個體。使用 Google Cloud CLI 或 REST,並為每個已連結的區域磁碟指定
replicaZones
和deviceName
參數。詳情請參閱「從機器映像檔建立執行個體,並覆寫屬性」。
透過機器映像檔建立執行個體 (不覆寫)
如果您想建立完全以機器映像檔為基礎的執行個體,且不變更屬性,請使用這個方法。
主控台
前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。
在
「Create VM from ...」選單中,選取「Machine images」。在隨即顯示的「Create VM from machine image」視窗中,執行下列操作:
選取機器映像檔。
如要建立並啟動執行個體,請按一下「建立」。
gcloud
使用 gcloud compute instances create
指令,根據機器映像檔建立執行個體。
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --source-machine-image=SOURCE_MACHINE_IMAGE_NAME
更改下列內容:
INSTANCE_NAME
:執行個體名稱ZONE
:執行個體的區域SOURCE_MACHINE_IMAGE_NAME
:用來建立執行個體的機器映像檔
示例
舉例來說,您可以使用下列 gcloud
指令,從名為 my-machine-image
的機器映像檔,在 us-east1-b
區域中建立名為 my-instance
的執行個體。
gcloud compute instances create my-instance \ --zone=us-east1-b \ --source-machine-image=my-machine-image
建立執行個體後,輸出內容會類似以下內容:
Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS my-instance us-east1-b e2-standard-2 192.0.2.1 203.224.0.113 RUNNING
REST
在 API 中,建構對 instances.insert
方法的 POST
要求。在要求主體中加入下列參數:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL" }
更改下列內容:
PROJECT_ID
:您的專案 ID。ZONE
:執行個體的區域。INSTANCE_NAME
:執行個體的名稱。SOURCE_MACHINE_IMAGE_URL
:您要用來建立執行個體的機器映像檔完整或部分網址。舉例來說,如果您在名為myProject
的專案中,有名為my-machine-image
的機器映像檔,以下網址有效:https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
projects/myProject/global/machineImages/my-machine-image
global/machineImages/my-machine-image
使用機器映像檔屬性覆寫功能建立執行個體
如果您想主要根據機器映像檔建立執行個體,但稍做一些變更,可使用覆寫行為。如要使用覆寫行為,您可在建立執行個體時傳入屬性,以覆寫現有的機器映像檔屬性。
使用覆寫功能時,請注意下列事項:
- 您無法覆寫已連接磁碟的任何屬性 (除了磁碟名稱),除非您是透過機器映像檔建立執行個體。
您必須為每個已連結的區域磁碟指定
replicaZones
參數,以及機器映像檔中的區域磁碟deviceName
。如果來源執行個體 (用於產生機器映像檔) 和新執行個體屬於相同專案和相同區域,則適用下列規定:
- 來源執行個體和新執行個體的大部分屬性都相同。差異的屬性包括自動指派的臨時 IP 位址。
- 如果您在建立新執行個體時,來源執行個體仍存在,則新執行個體無法使用與來源執行個體相同的名稱和區域。
如果用來產生機器映像檔的來源執行個體和新執行個體屬於同一個專案,但位於不同區域,則適用下列規定:
- 您必須為新執行個體覆寫所有可用區和區域資源。舉例來說,如果您要從來源執行個體屬於不同區域的機器映像檔建立執行個體,就必須覆寫區域資源,例如子網路和區域防火牆規則。不過,負載平衡器和服務帳戶等全域資源不需要覆寫值,除非您要修改這些資源。
主控台
前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。
在
「Create VM from ...」選單中,選取「Machine images」。在隨即顯示的「Create VM from machine image」視窗中,選取範本,然後按一下
「Customize」。選用:指定其他設定選項。詳情請參閱「建立執行個體時的設定選項」。
如要建立並啟動執行個體,請按一下「建立」。
gcloud
使用 gcloud compute instances create
指令,從機器映像檔建立執行個體,並新增要覆寫的屬性。
舉例來說,您可以使用下列 gcloud
指令,從名為 my-machine-image
的機器映像檔,在 us-east1-b
區域中建立名為 my-instance
的 VM。在本例中,我們會套用覆寫值來變更機器類型、停止主機維護政策,並設定名為 regional-disk-0
的區域永久磁碟。
gcloud compute instances create my-instance \ --zone=us-east1-b \ --source-machine-image=my-machine-image \ --machine-type=e2-standard-2 \ --maintenance-policy=TERMINATE \ --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \ --create-disk=device-name=regional-disk-0,\ replica-zones=^:^us-east1-b:us-east1-c,boot=false
REST
如要在建立執行個體時覆寫機器映像檔屬性,請對 instances.insert
方法建構 POST
要求。在要求主體中加入 sourceMachineImage
參數和任何需要的覆寫值。您可以新增任何通常會在建立執行個體時設定的屬性。舉例來說,如要覆寫機器類型,API 呼叫就會包含 machineType
參數。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE", "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL" }
更改下列內容:
PROJECT_ID
:專案 ID。ZONE
:執行個體的區域。INSTANCE_NAME
:執行個體的名稱。NEW_MACHINE_TYPE
:您要用於執行個體的機器類型。SOURCE_MACHINE_IMAGE_URL
:您要用來建立執行個體的機器映像檔完整或部分網址。舉例來說,如果您在名為myProject
的專案中,有名為my-machine-image
的機器映像檔,以下網址有效:https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
projects/myProject/global/machineImages/my-machine-image
global/machineImages/my-machine-image
覆寫行為
Compute Engine API 中的覆寫行為遵守 JSON 合併修補規則,如 RFC 7396 所述。總結來說,適用的規則如下:
- 如果您覆寫基本欄位,機器映像檔中的對應基本欄位將替換成要求中的基本欄位值。基本欄位包含
machineType
和name
等參數。 - 若覆寫重複欄位,該屬性的所有重複值都會替換成要求中提供的對應值。重複欄位通常是類型為
list
的屬性。例如,disks
和networkInterfaces
是重複欄位。 - 若要覆寫
nested object
,則機器映像檔中的物件會與要求中的對應物件規格合併。請注意,如果巢狀物件位於重複欄位中,系統會依據重複欄位的規則處理欄位。此規則唯一的例外是標籤,即使標籤屬於object
類型,也會將其視為重複欄位。
舉例來說,如果您想使用機器映像檔建立 VM,並透過 VM 建立區域磁碟,請為磁碟使用覆寫值,以便指定 replicaZones
選項。由於 disks
欄位是重複欄位,因此您必須為所有已連結的磁碟和開機磁碟指定磁碟設定,而非僅指定地區磁碟。
POST https://compute.googleapis.com/compute/v1/projects/my-proj/zones/us-west1-a/instances { "name": "vm-from-image", "sourceMachineImage": "global/machineImages/my-machine-image", "disks": [ { "kind": "compute#attachedDisks", "boot": true, "autoDelete": true, "deviceName": "boot-device", "initializeParams": { "sourceImage": "projects/my-proj/global/images/my-image", "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard", } }, { "kind": "compute#attachedDisk", "boot": false, "autoDelete": true, "deviceName": "regional-device-0", "initializeParams": { "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard", "replicaZones": [ "projects/my-proj/zones/us-west1-a", "projects/my-proj/zones/us-west1-c" ] } } ] }
使用其他專案的機器映像檔建立執行個體
使用其他專案的機器映像檔建立執行個體時,您可能無法存取附加至該來源專案的服務帳戶。如果您想從位於其他專案的機器映像檔建立執行個體,請務必確認您有權存取機器映像檔,並在新的執行個體上覆寫服務帳戶屬性。
如果您要跨使用共用虛擬私有雲網路的專案共用機器映像檔,則必須在從機器映像檔建立執行個體時,明確指定共用虛擬私有雲詳細資料。舉例來說,如果您在非主專案中建立執行個體,請使用 --network
、--subnet
或 --network-interface
標記,提供主專案的共用虛擬私有雲詳細資料。
以下各節將說明如何使用 Google Cloud CLI,從位於不同專案中的機器映像檔建立執行個體。
-
您可以在來源專案或機器映像檔上授予權限。使用
gcloud compute machine-images add-iam-policy-binding
指令授予機器映像檔的權限。gcloud compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \ --project=MACHINE_IMAGE_PROJECT \ --member='ACCOUNT_EMAIL' \ --role='roles/compute.admin'
更改下列內容:
MACHINE_IMAGE_PROJECT
:包含來源機器映像檔的專案 ID。MACHINE_IMAGE_NAME
:您要為其新增權限繫結的機器映像檔名稱。ACCOUNT_EMAIL
:建立執行個體的serviceAccount
或user
的電子郵件地址。請確認電子郵件格式包含必要的字首。前置字串必須是下列其中一種:user:
如果電子郵件地址與使用者帳戶相關聯,請指定這個值。例如:user:[email protected]
。serviceAccount:
如果電子郵件地址與服務帳戶相關聯,請指定這項屬性。例如:serviceAccount:[email protected]
。
示例
舉例來說,如要將
compute.admin
繫結新增至名為my-machine-image
的機器映像檔,並將其繫結至服務帳戶電子郵件地址[email protected]
,請使用下列gcloud CLI
指令:gcloud compute machine-images add-iam-policy-binding my-machine-image \ --project=machine-image-project \ --member='serviceAccount:[email protected]' \ --role='roles/compute.admin'
將與機器映像檔相關聯的服務帳戶的服務帳戶使用者角色 (
roles/iam.serviceAccountUser
) 授予執行gcloud compute instances create
指令的使用者。使用
gcloud compute instances create
指令,根據機器映像檔建立執行個體。gcloud compute instances create INSTANCE_NAME \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE \ --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --subnet=SUBNET
更改下列內容:
INSTANCE_PROJECT_ID
:您要在其中建立執行個體的專案 IDINSTANCE_NAME
:執行個體的名稱ZONE
:執行個體的區域MACHINE_IMAGE_PROJECT
:機器映像檔所在專案的專案 IDMACHINE_IMAGE_NAME
:要用來建立執行個體的機器映像檔SERVICE_ACCOUNT_EMAIL
:要附加至執行個體的服務帳戶電子郵件地址SUBNET
:如果子網路和執行個體位於同一個專案,請將 SUBNET 替換為與執行個體位於同一個區域的子網路名稱如要指定共用虛擬私有雲網路中的子網路,請將
SUBNET
替換為以下格式的字串:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
請依指示取代下列項目:
HOST_PROJECT_ID
:共用虛擬私有雲主專案的專案 IDREGION
:子網路的區域SUBNET_NAME
:子網路名稱
示例
舉例來說,下列指令會從名為
my-machine-image
的機器映像檔,在us-east1-b
區域的vm-project
中建立名為my-instance
的 VM。--service-account
旗標會指定要附加至新建立的 VM 的服務帳戶。如果您未提供這個標記,來源服務帳戶就無法在兩個專案間共用,且作業會失敗。gcloud compute instances create my-instance \ --project=vm-project \ --zone=us-east1-b \ --source-machine-image=projects/machine-image-project/global/machineImages/my-machine-image \ --service-account=000123456789-compute@developer.gserviceaccount.com
建立 VM 後,輸出內容會類似以下內容:
Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS my-instance us-east1-b e2-standard-2 192.0.2.1 203.224.0.113 RUNNING
後續步驟
- 進一步瞭解機器映像檔
- 進一步瞭解如何建立 Compute Engine 執行個體