建立機器映像檔後,您就能使用該映像檔複製來源 Compute 執行個體。如要進一步瞭解機器映像檔的用途,請參閱何時該使用機器映像檔。
機器映像檔包含複製執行個體所需的大部分資訊和資料。
機器映像檔無法變更。不過,從機器映像檔建立執行個體時,您可以覆寫機器映像檔的幾乎所有屬性。
您可以使用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
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
必要的角色
如要取得從機器映像檔建立 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」(建立執行個體) 頁面。
在「從...建立 VM」
選單中,選取「機器映像檔」。在隨即顯示的「依據機器映像檔建立 VM」視窗中,執行下列操作:
選取機器映像檔。
如要建立並啟動執行個體,請按一下「建立」。
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」(建立執行個體) 頁面。
在「從...建立 VM」
選單中,選取「機器映像檔」。在隨即顯示的「Create VM from machine image」(從機器映像檔建立 VM) 視窗中,選取範本,然後按一下
「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:user@example.com
。serviceAccount:
如果電子郵件地址與服務帳戶相關聯,請指定這項屬性。例如:serviceAccount:123456789000-compute@developer.gserviceaccount.com
。
示例
舉例來說,如要將
compute.admin
繫結新增至名為my-machine-image
的機器映像檔,並新增至服務帳戶電子郵件地址123456789000-compute@developer.gserviceaccount.com
,請使用下列gcloud CLI
指令:gcloud compute machine-images add-iam-policy-binding my-machine-image \ --project=machine-image-project \ --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \ --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
:共用 VPC 主專案的專案 IDREGION
:子網路的區域SUBNET_NAME
:子網路名稱
示例
舉例來說,下列指令會在
us-east1-b
可用區的vm-project
中,從名為my-machine-image
的機器映像檔建立名為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 執行個體
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-29 (世界標準時間)。
-