本頁面說明如何使用執行個體範本建立 VM 執行個體。執行個體範本是一種 API 資源,可定義 VM 執行個體的屬性。您可以在執行個體範本中定義機器類型、OS 映像檔、永久磁碟設定、中繼資料、開機指令碼等屬性,然後使用執行個體範本建立個別 VM 執行個體或代管執行個體群組。
利用執行個體範本建立 VM 執行個體時,預設行為會建立 VM 執行個體,其屬性與範本中指定的屬性相同,但 VM 執行個體名稱和執行個體運作時所屬的區域例外。此外,如果您要變更執行個體範本的某些屬性以做特定用途,也可以選擇在建立執行個體期間覆寫特定欄位。
本文假定執行個體範本已準備就緒。如果您還沒有執行個體範本,請按照操作說明建立新執行個體範本。
事前準備
- 如要使用本指南中的指令列範例,請完成下列事項:
- 安裝或更新至最新版 gcloud 指令列工具。
- 設定預設地區和區域。
- 如要使用本指南中的 API 範例,請設定 API 存取權。
- 參閱執行個體範本說明文件。
- 建立執行個體範本。
利用執行個體範本建立 VM 執行個體
如要完全依照執行個體範本說明所述建立執行個體,請依照下列操作說明操作。
主控台
- 前往「VM instances」(VM 執行個體) 頁面。
- 按一下 [Create instance] (建立執行個體)。
- 按一下 [New VM instance from template] (利用範本建立新的 VM 執行個體)。
- 選取範本並按一下 [Continue] (繼續)。
- 指定執行個體的名稱,並視需要進一步調整各項設定。
- 按一下 [Create] (建立)。請參閱建立執行個體一節瞭解其他設定詳情。
gcloud
透過 gcloud compute
,使用與您用來建立一般執行個體相同的 instances create
指令,但要新增 --source-instance-template
標記:
gcloud compute instances create [INSTANCE_NAME] --source-instance-template [INSTANCE_TEMPLATE_NAME]
其中:
[INSTANCE_NAME]
是執行個體的名稱。[INSTANCE_TEMPLATE_NAME]
是要使用的執行個體範本名稱。例如:
gcloud compute instances create example-instance --source-instance-template my-instance-template
API
在 API 中,您可以建構一般要求來建立執行個體,但要包含 sourceInstanceTemplate
查詢參數,後接執行個體範本的正確路徑。
POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?sourceInstanceTemplate=[INSTANCE_TEMPLATE_NAME]
在要求主體中輸入 VM 執行個體的 name
:
{ "name": "example-instance" }
例如,下列程式碼片段包含範本的完整路徑:https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
.
POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
{ "name": "example-instance" }
利用執行個體範本與覆寫功能建立 VM 執行個體
使用執行個體範本啟動 VM 執行個體時,預設行為會完全依照執行個體範本說明所述建立 VM 執行個體,但執行個體名稱和區域例外。
如果您想主要根據執行個體範本建立執行個體,但稍做一些變更,可使用覆寫行為。如要使用覆寫行為,您可在建立執行個體時傳入屬性,以覆寫現有執行個體範本。
gcloud
使用 gcloud
工具提出要求,以 --source-instance-template
標記建立執行個體,然後以適當的 gcloud
標記覆寫您想要的任何屬性。如要查看適用標記清單,請參閱 gcloud
參考資料。
例如,如要覆寫執行個體範本的機器類型、中繼資料、作業系統、開機永久磁碟和次要磁碟,請提供下列標記:
gcloud compute instances create example-instance --source-instance-template example-instance \
--machine-type n1-standard-2 --image-family debian-8 --image-project debian-cloud \
--metadata bread=butter --disk=boot=no,name=my-override-disk
API
在 API 中,建構一般要求以建立執行個體時,您可在要求主體中使用 sourceInstanceTemplate
查詢參數,並提供要覆寫的任何欄位。
API 中的覆寫行為遵守 JSON 合併修補規則,如 RFC 7396 所述。
具體內容包括:
- 若覆寫原始欄位,執行個體範本中的對應原始欄位將替換成要求中的原始欄位值。原始欄位包括
machineType
、sourceImage
、name
等。 - 若覆寫重複欄位,該屬性的所有重複值都將替換成要求中提供的對應值。重複欄位通常是
list
類型的屬性。例如,disks
和networkInterfaces
是重複欄位。 - 若覆寫
nested object
,執行個體範本中的物件將與要求中的對應物件規格合併。請注意,如果巢狀物件存在於重複欄位之中,系統會依據重複欄位的規則處理欄位。此規則唯一的例外是標籤,即使標籤屬於object
類型,也會將其視為重複欄位。
例如,假設您的執行個體範本有兩個非開機磁碟,而您想覆寫其中一個磁碟。您必須在要求中提供完整 disks
規格,包括您要保留的磁碟。
此要求的網址為:
POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?sourceInstanceTemplate=https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-instance-template
要求主體:
{
"disks": [
{
# Since you are overriding the repeated disk property, you must
# specify a boot disk in the request, even if it is already
# specified in the instance template
"autoDelete": true,
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-8"
},
"mode": "READ_WRITE",
"type": "PERSISTENT"
},
{
# New disk you want to use
"autoDelete": false,
"boot": false,
"mode": "READ_WRITE",
"source": "zones/us-central1-f/disks/my-override-disk",
"type": "PERSISTENT"
},
{
# Assume this disk is already specified in instance template, but
# you must specify it again since you are overriding the disks
# property
"autoDelete": false,
"boot": false,
"mode": "READ_WRITE",
"source": "zones/us-central1-f/disks/my-other-disk-to-keep",
"type": "PERSISTENT"
}
],
"machineType": "zones/us-central1-f/machineTypes/n1-standard-2",
"name": "example-instance"
}
後續步驟
- 參閱先佔 VM 執行個體說明文件。
- 瞭解關閉指令碼。
- 參閱先佔執行個體定價。