如要建立大量相同且彼此獨立的虛擬機器 (VM) 執行個體,請使用 Google Cloud CLI 或 Compute Engine API 大量建立 VM。您可以在區域中的所有可用區建立這些 VM,也可以分散到特定可用區。
如要進一步瞭解相關限制,請參閱「關於大量建立 VM」一文。如要建立附加 GPU 的執行個體,請參閱「大量建立 GPU VM」。
事前準備
- 如要建立 VM 和任何相關資源,請確認您有足夠的配額和必要權限。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
請根據您打算如何使用本頁範例,選取對應的分頁標籤:
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」一節。
必要的角色
如要取得大量建立 VM 的權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備大量建立 VM 所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要大量建立 VM,必須具備下列權限:
-
compute.instances.create專案 -
如要使用自訂映像檔建立 VM:
compute.images.useReadOnly映像檔 -
如要使用快照建立 VM,請按照下列步驟操作:
compute.snapshots.useReadOnly在快照上 -
如要使用執行個體範本建立 VM,請按照下列步驟操作:
compute.instanceTemplates.useReadOnly在執行個體範本上 -
如要為 VM 指定子網路:
compute.subnetworks.use在專案或所選子網路上 -
如要為 VM 指定靜態 IP 位址:
compute.addresses.use專案 -
使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上執行下列步驟:
compute.subnetworks.useExternalIp -
如要將舊版網路指派給 VM,請按照下列步驟操作:
compute.networks.use在專案中 -
使用舊版網路時,如要為 VM 指派外部 IP 位址,請執行下列步驟:
compute.networks.useExternalIp專案 -
如要為 VM 設定 VM 執行個體中繼資料,請在專案中執行下列步驟:
compute.instances.setMetadata -
如要為 VM 設定標記,請按照下列步驟操作:
compute.instances.setTags在 VM 上 -
如要設定 VM 的標籤:
compute.instances.setLabels在 VM 上 -
如要設定 VM 使用的服務帳戶:
compute.instances.setServiceAccount在 VM 上 -
如要為 VM 建立新磁碟:
compute.disks.create專案 -
如要以唯讀或讀寫模式連結現有磁碟:
compute.disks.use在磁碟上 -
如要以唯讀模式連接現有磁碟:
compute.disks.useReadOnly磁碟
在區域中大量建立 VM
如要在某個區域大量建立 VM,請使用 gcloud CLI 或 Compute Engine API。
如果您指定機型或額外硬體 (例如 GPU 或本機 SSD) 的支援,Compute Engine 會將 VM 放置在區域內支援該機型和額外硬體的可用區。
gcloud
如要在區域中大量建立 VM,請使用下列 gcloud compute
instances bulk create 指令:
gcloud compute instances bulk create \
( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
--region=REGION \
--count=COUNT \
[ --min-count=MIN_COUNT \ ]
[--location-policy=LOCATION_POLICY \ ]
[--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]
更改下列內容:
NAME_PATTERN:VM 的名稱模式。請使用一連串井字號 (
#) 字元,讓 Compute Engine 替換成一連串數字。舉例來說,如果名稱模式為vm-#,就會產生vm-1和vm-2等 VM 名稱,最多可達--count指定的 VM 數量,且該數量必須小於或等於名稱模式允許的 VM 數量。使用名稱模式時,Compute Engine 會檢查先前要求建立的現有 VM 名稱,盡量避免名稱衝突。
PREDEFINED_NAMES:要建立的 VM 預先定義名稱清單。如果使用這個旗標並指定
COUNT,COUNT必須等於提供的名稱數量。REGION:要建立 VM 的區域。
COUNT:要建立的 VM 數量。這個值必須小於或等於
NAME_PATTERN允許的 VM 數量。或者,如果使用--predefined-names,則不必指定COUNT,但如果指定,則必須等於提供的名稱數量。MIN_COUNT:要建立的 VM 數量下限。下表說明如何設定這個旗標,以及要求的行為:
值 說明 未設定 預設值為 COUNT。如果 Compute Engine 無法建立COUNT指定數量的 VM,要求就會失敗,且不會建立任何 VM。1Compute Engine 會盡可能建立 VM,最多 COUNT個。大於 1且小於COUNTCompute Engine 會建立至少 MIN_COUNT個 VM,最多COUNT個 VM。如果無法建立MIN_COUNTVM,要求就會失敗,且不會建立任何 VM。LOCATION_POLICY:要納入或排除的區域。使用鍵/值組合清單,其中區域為鍵,政策為值。這項政策的有效值為
allow(預設值) 和deny。以下是這個旗標的值範例:--location-policy=us-east1-b=allow,us-east1-c=deny
TARGET_DISTRIBUTION_SHAPE:VM 在指定可用區中的分布情形。使用
--location-policy旗標指定可用區。下表列出這項旗標的有效值:值 說明 ANY_SINGLE_ZONE強制將 VM 放置在單一可用區,並優先使用未使用的預留項目。這項功能可避免跨可用區網路輸出,或縮短網路延遲時間。這是預設值。 BALANCED嘗試將 VM 平均分配到區域中的所有可用區。 ANY允許將 VM 分配到區域中的多個可用區。 選擇有可用資源的可用區,並盡量減少未使用的可用區預留項目。
REST
如要在區域中大量建立 VM,請使用下列instances.bulkInsert方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
...
"namePattern": "NAME_PATTERN",
"perInstanceProperties": {
"PREDEFINED_NAME_1": {},
"PREDEFINED_NAME_2": {},
...
},
"count": COUNT,
"minCount": MIN_COUNT,
"locationPolicy": {
"LOCATION_POLICY"
},
"targetShape": "TARGET_DISTRIBUTION_SHAPE"
...
}
更改下列內容:
PROJECT_ID:專案 ID。
REGION:要在其中建立 VM 的區域。
NAME_PATTERN:VM 的名稱模式。指定這個或
perInstanceProperties。使用一連串井字號 (#) 字元,讓 Compute Engine 替換成一連串數字。舉例來說,如果使用vm-#做為名稱模式,系統會產生名稱為vm-1和vm-2等的 VM,最多可達--count指定的 VM 數量,且必須小於或等於名稱模式允許的 VM 數量。使用名稱模式時,Compute Engine 會檢查先前要求建立的現有 VM 名稱,盡量避免名稱衝突。
PREDEFINED_NAME_1、PREDEFINED_NAME_2、...:要建立的 VM 預先定義名稱清單。請指定這個或
namePattern。如果使用這個旗標並指定COUNT,COUNT必須等於提供的名稱數量。COUNT:要建立的 VM 數量。這個值必須小於或等於
NAME_PATTERN允許的 VM 數量。或者,如果使用perInstanceProperties,則不必指定COUNT,但如果指定,則必須等於提供的名稱數量。MIN_COUNT:要建立的 VM 數量下限。下表說明如何設定這個旗標,以及要求的行為:
值 說明 未設定 預設值為 COUNT。如果 Compute Engine 無法建立COUNT指定數量的 VM,要求就會失敗,且不會建立任何 VM。1Compute Engine 會盡可能建立 VM,最多 COUNT個。大於 1且小於COUNTCompute Engine 會建立至少 MIN_COUNT個 VM,最多COUNT個 VM。如果無法建立MIN_COUNTVM,要求就會失敗,且不會建立任何 VM。LOCATION_POLICY:要納入或排除的區域。請使用鍵/值組合清單,以可用區為鍵,政策為值。這項政策的有效值為
ALLOW(預設值) 和DENY。以下是這個欄位的值範例:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },TARGET_DISTRIBUTION_SHAPE:VM 在指定可用區的分佈情形。使用
locationPolicy欄位指定區域。下表列出這個欄位的有效值:值 說明 ANY_SINGLE_ZONE強制將 VM 放置在單一可用區,並優先使用未使用的預留項目。這項功能可避免跨可用區網路輸出,或縮短網路延遲時間。這是預設值。 BALANCED嘗試將 VM 平均分配到區域中的所有可用區。 ANY允許將 VM 分配到區域內的多個可用區。選擇有可用資源的可用區,並盡量減少未使用的可用區預留項目。
在可用區中大量建立 VM
如要在可用區中大量建立 VM,請使用 gcloud CLI 或 Compute Engine API。
gcloud
如要在特定可用區中大量建立 VM,請使用下列 gcloud compute
instances bulk create指令。
gcloud compute instances bulk create \
( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
--zone=ZONE \
--count=COUNT \
[ --min-count=MIN_COUNT ]
更改下列內容:
NAME_PATTERN:VM 的名稱模式。請使用一連串井字號 (
#) 字元,讓 Compute Engine 替換成一連串數字。舉例來說,如果名稱模式為vm-#,就會產生vm-1和vm-2等 VM 名稱,最多可達--count指定的 VM 數量,且該數量必須小於或等於名稱模式允許的 VM 數量。使用名稱模式時,Compute Engine 會檢查先前要求建立的現有 VM 名稱,盡量避免名稱衝突。
PREDEFINED_NAMES:要建立的 VM 預先定義名稱清單。如果使用這個旗標並指定
COUNT,COUNT必須等於提供的名稱數量。ZONE:要建立 VM 的可用區。
COUNT:要建立的 VM 數量。這個值必須小於或等於
NAME_PATTERN允許的 VM 數量。或者,如果使用--predefined-names,則不必指定COUNT,但如果指定,則必須等於提供的名稱數量。MIN_COUNT:要建立的 VM 數量下限。下表說明如何設定這個旗標,以及要求的行為:
值 說明 未設定 預設值為 COUNT。如果 Compute Engine 無法建立COUNT指定數量的 VM,要求就會失敗,且不會建立任何 VM。1Compute Engine 會盡可能建立 VM,最多 COUNT個。大於 1且小於COUNTCompute Engine 會建立至少 MIN_COUNT個 VM,最多COUNT個 VM。如果無法建立MIN_COUNT個 VM,要求就會失敗,不會建立任何 VM。
REST
如要在可用區中大量建立 VM,請使用下列instances.bulkInsert方法。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
...
"namePattern": "NAME_PATTERN",
"perInstanceProperties": {
"PREDEFINED_NAME_1": {},
"PREDEFINED_NAME_2": {},
...
},
"count": COUNT,
"minCount": MIN_COUNT,
...
}
更改下列內容:
PROJECT_ID:專案 ID。
ZONE:要建立 VM 的可用區。
NAME_PATTERN:VM 的名稱模式。指定這個或
perInstanceProperties。使用一連串井字號 (#) 字元,Compute Engine 會將其替換為一連串數字。舉例來說,如果名稱模式為vm-#,就會產生vm-1和vm-2等 VM 名稱,最多可產生--count指定的 VM 數量,且該數量必須小於或等於名稱模式允許的 VM 數量。使用名稱模式時,Compute Engine 會檢查先前要求建立的現有 VM 名稱,盡量避免名稱衝突。
PREDEFINED_NAME_1、PREDEFINED_NAME_2、...:要建立的 VM 預先定義名稱清單。請指定這個或
namePattern。如果使用這個旗標並指定COUNT,COUNT必須等於提供的名稱數量。COUNT:要建立的 VM 數量。這個值必須小於或等於
NAME_PATTERN允許的 VM 數量。或者,如果使用perInstanceProperties,則不必指定COUNT,但如果指定,則必須等於提供的名稱數量。MIN_COUNT:要建立的 VM 數量下限。下表說明如何設定這個旗標,以及要求的行為:
值 說明 未設定 預設值為 COUNT。如果 Compute Engine 無法建立COUNT指定數量的 VM,要求就會失敗,且不會建立任何 VM。1Compute Engine 會盡可能建立 VM,最多 COUNT個。大於 1且小於COUNTCompute Engine 會建立至少 MIN_COUNT個 VM,最多COUNT個 VM。如果無法建立MIN_COUNT個 VM,要求就會失敗,不會建立任何 VM。
大量建立具有自訂主機名稱的 VM
您可以使用 gcloud CLI 或 Compute Engine API,在區域或可用區中大量建立具有自訂主機名稱的 VM。
您必須針對自訂主機名稱手動設定 DNS 記錄。詳情請參閱「限制」一節。
如未指定主機名稱,Compute Engine 會將 VM 的主機名稱設為下列其中一項:
VM_NAME.c.PROJECT_ID.internal啟用全域 DNS 時VM_NAME.ZONE.c.PROJECT_ID.internal啟用區域性 DNS 時
詳情請參閱「內部 DNS 名稱」。
gcloud
如要在特定區域中大量建立 VM,並使用自訂主機名稱,請使用下列 gcloud beta compute instances bulk create 指令。
gcloud beta compute instances bulk create \
( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
--per-instance-hostnames=[VM_NAME=HOSTNAME,...] \
--zone=REGION \
--count=COUNT \
[ --min-count=MIN_COUNT ]
[--location-policy=LOCATION_POLICY \ ]
[--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]
更改下列內容:
NAME_PATTERN:VM 的名稱模式。請使用一連串井字號 (
#) 字元,讓 Compute Engine 替換成一連串數字。舉例來說,如果名稱模式為vm-#,就會產生vm-1和vm-2等 VM 名稱,最多可達--count指定的 VM 數量,且該數量必須小於或等於名稱模式允許的 VM 數量。使用名稱模式時,Compute Engine 會檢查先前要求建立的現有 VM 名稱,盡量避免名稱衝突。
PREDEFINED_NAMES:要建立的 VM 預先定義名稱清單。如果使用這個旗標並指定
COUNT,COUNT必須等於提供的名稱數量。[VM_NAME=HOSTNAME, ...]: VM 的預先定義名稱和要指派給 VM 的完整網域主機名稱鍵/值組合清單。自訂主機名稱必須符合 RFC 1035 對有效主機名稱的要求。
REGION:要建立 VM 的可用區。
COUNT:要建立的 VM 數量。這個值必須小於或等於
NAME_PATTERN允許的 VM 數量。或者,如果使用--predefined-names,則不必指定COUNT,但如果指定,則必須等於提供的名稱數量。MIN_COUNT:要建立的 VM 數量下限。下表說明如何設定這個旗標,以及要求的行為:
值 說明 未設定 預設值為 COUNT。如果 Compute Engine 無法建立COUNT指定數量的 VM,要求就會失敗,且不會建立任何 VM。1Compute Engine 會盡可能建立 VM,最多 COUNT個。大於 1且小於COUNTCompute Engine 會建立至少 MIN_COUNT個 VM,最多COUNT個 VM。如果無法建立MIN_COUNTVM,要求就會失敗,且不會建立任何 VM。LOCATION_POLICY:要納入或排除的區域。請使用鍵/值組合清單,以可用區為鍵,政策為值。這項政策的有效值為
ALLOW(預設值) 和DENY。以下是這個欄位的值範例:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },TARGET_DISTRIBUTION_SHAPE:VM 在指定可用區的分佈情形。使用
locationPolicy欄位指定區域。下表列出這個欄位的有效值:值 說明 ANY_SINGLE_ZONE強制將 VM 放置在單一可用區,並優先使用未使用的預留項目。這項功能可避免跨可用區網路輸出,或縮短網路延遲時間。這是預設值。 BALANCED嘗試將 VM 平均分配到區域中的所有可用區。 ANY允許將 VM 分配到區域中的多個可用區。 選擇有可用資源的可用區,並盡量減少未使用的可用區預留項目。
REST
如要在特定區域中大量建立具有自訂主機名稱的 VM,請使用下列 instances.bulkInsert 方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
...
"namePattern": "NAME_PATTERN",
"perInstanceProperties": {
"PREDEFINED_NAME_1": {"hostname": HOSTNAME_1},
"PREDEFINED_NAME_2": {"hostname": HOSTNAME_2},
...
},
"count": COUNT,
"minCount": MIN_COUNT,
"locationPolicy": {
"LOCATION_POLICY"
},
"targetShape": "TARGET_DISTRIBUTION_SHAPE"
...
}
更改下列內容:
PROJECT_ID:專案 ID。
REGION:要在其中建立 VM 的區域。
NAME_PATTERN:VM 的名稱模式。指定這個或
perInstanceProperties。使用一連串井字號 (#) 字元,讓 Compute Engine 替換成一連串數字。舉例來說,如果使用vm-#做為名稱模式,系統會產生名稱為vm-1和vm-2等的 VM,最多可達--count指定的 VM 數量,且必須小於或等於名稱模式允許的 VM 數量。使用名稱模式時,Compute Engine 會檢查先前要求建立的現有 VM 名稱,盡量避免名稱衝突。
PREDEFINED_NAME_1、PREDEFINED_NAME_2 等:要建立的 VM 預先定義名稱清單。請指定這個或
namePattern。如果使用這個旗標並指定COUNT,COUNT必須等於提供的名稱數量。HOSTNAME_1、HOSTNAME_2 等:要為 VM 指派的完整網域主機名稱。自訂主機名稱必須符合 RFC 1035 對有效主機名稱的要求。
舉例來說,如要建立兩個 VM
vm-1和vm-2,並分別使用自訂主機名稱my-host1234.example.com和test.example.com,請在perInstanceProperties中指定hostname屬性,如下所示:{ ... "perInstanceProperties": { "vm-1": { "hostname": "my-host1234.example.com" }, "vm-2": { "hostname": "test.example.com" }, ...} },COUNT:要建立的 VM 數量。這個值必須小於或等於
NAME_PATTERN允許的 VM 數量。或者,如果使用perInstanceProperties,則不必指定COUNT,但如果指定,則必須等於提供的名稱數量。MIN_COUNT:要建立的 VM 數量下限。下表說明如何設定這個旗標,以及要求的行為:
值 說明 未設定 預設值為 COUNT。如果 Compute Engine 無法建立COUNT指定數量的 VM,要求就會失敗,且不會建立任何 VM。1Compute Engine 會盡可能建立 VM,最多 COUNT個。大於 1且小於COUNTCompute Engine 會建立至少 MIN_COUNT個 VM,最多COUNT個 VM。如果無法建立MIN_COUNTVM,要求就會失敗,且不會建立任何 VM。LOCATION_POLICY:要納入或排除的區域。請使用鍵/值組合清單,以可用區為鍵,政策為值。這項政策的有效值為
ALLOW(預設值) 和DENY。以下是這個欄位的值範例:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },TARGET_DISTRIBUTION_SHAPE:VM 在指定可用區的分佈情形。使用
locationPolicy欄位指定區域。下表列出這個欄位的有效值:值 說明 ANY_SINGLE_ZONE強制將 VM 放置在單一可用區,並優先使用未使用的預留項目。這項功能可避免跨可用區網路輸出,或縮短網路延遲時間。這是預設值。 BALANCED嘗試將 VM 平均分配到區域中的所有可用區。 ANY允許將 VM 分配到區域中的多個可用區。 選擇有可用資源的可用區,並盡量減少未使用的可用區預留項目。
查看大量建立 VM 的要求狀態
建立變更要求時,Compute Engine 會傳回 operation 資源,您可以輪詢該資源來取得作業狀態。詳情請參閱「處理 API 回應」。
如要取得大量插入要求的狀態,請將 HTTP GET 要求傳送至 operation 資源:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID
如要取得區域大量插入要求的狀態,請傳送下列要求:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID
更改下列內容:
PROJECT_ID:您要建立 VM 的專案 IDREGION:要建立 VM 的區域ZONE:要建立 VM 的可用區OPERATION_ID:大量插入作業 ID
回應中的 instancesBulkInsertOperationMetadata 物件會在 perLocationStatus 欄位中,包含各區域的作業詳細資料。對於大量建立要求中包含的每個區域,perLocationStatus
包含下列欄位:
status:狀態為下列其中一種:CREATING:正在可用區中建立 VM。ROLLING_BACK:要求在可用區中失敗,正在復原。DONE:已在可用區中成功建立或復原 VM。
targetVmCount:Compute Engine 嘗試在可用區中建立的 VM 數量。Compute Engine 會在初始檢查後決定這個數量,且在作業期間不會變更。檢查作業狀態時,每個區域一律會顯示這個欄位。createdVmCount:可用區中已建立的 VM 數量。在特定可用區中,這個值不會超過targetVmCount。failedToCreateVmCount:在可用區中建立失敗的 VM 數量。deletedVmCount:在區域中刪除的 VM 數量,這是失敗作業回溯程序的一部分。
回應中的 progress 欄位代表作業的完成百分比。
在 Compute Engine 成功建立至少最低數量的 VM,且不再建立 VM 或復原要求之前,大量插入作業的狀態會是 RUNNING。
大量插入作業進行時,您應該會看到類似下列的回應:
{
"kind" : "compute#operation",
"id": "4653028658507445766",
"name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationType": "bulkInsert",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project"
"targetId": 4653028658507445766,
"status": "RUNNING",
"progress": 2,
"user": "example@google.com",
"insertTime": "2023-04-23T09:57:13.474-07:00",
"startTime": "2023-04-23T09:57:13.474-07:00",
"selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationGroupId": "4653028658507445766",
"metadata":
"instances_bulk_insert_operation_metadata": {
"per_location_status": {
"zones/us-central1-a": {
"status": "CREATING",
"targetVmCount": 50,
"createdVmCount": 1
}
}
}
}
在本範例中,一個執行個體已成功建立,作業完成度為 2%。
當 Compute Engine 成功建立至少 minCount 指定的 VM 數量下限,或完成要求的回復作業時,這項作業會傳回 DONE 狀態。成功建立要求的 VM 數量後,您會收到類似下列的回應:
{
"endTime": "2023-04-23T09:58:13.474-07:00",
"id": "5053101474378293244",
"insertTime": "2023-04-23T09:57:13.474-07:00",
"instancesBulkInsertOperationMetadata": {
"perLocationStatus": {
"zones/us-central1-a": {
"status": "DONE",
"createdVmCount": 50,
"targetVmCount": 50
}
}
},
"kind": "compute#operation",
"name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationGroupId": "4653028658507445766",
"operationType": "bulkInsert",
"progress": 100,
"selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"startTime": "2023-09-11T16:21:55.629-07:00",
"status": "DONE",
"targetId": "625521788110",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project",
"user": "example@google.com",
"zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a"
}
詳情請參閱 instancesBulkInsertOperationMetadata 物件的說明文件。
檢查單一 VM 的狀態
如要檢查透過大量建立 VM 要求建立的單一 VM 狀態,請使用 gcloud CLI 或 Compute Engine API。
gcloud
從要求傳回的
Operation中,取得operationGroupId屬性的值。使用
operationGroupId屬性做為篩選器,搭配gcloud compute operations list指令,在專案的所有作業和可用區中,搜尋與區域或可用區要求相關聯的 VM:gcloud compute operations list \ --filter=(operationGroupId=OPERATION_GROUP_ID)
如要取得 VM 的其餘屬性,請執行下列任一操作:
在作業清單中,「
targetLink」代表 VM 的路徑。使用gcloud compute instances describe指令,並以這個路徑做為 VM 的名稱,即可取得 VM 的屬性:gcloud compute instances describe VM_NAME
使用
gcloud compute instances list指令,並搭配包含作業清單中 VM 名稱的篩選器:gcloud compute instances list VM_NAME \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
使用
gcloud compute instances list指令,從所有可用區和區域取得 VM 的屬性,並依執行個體專屬的標籤或名稱進行篩選:gcloud compute instances list \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
REST
從要求傳回的
Operation中,取得operationGroupId屬性的值。使用
operationGroupId屬性,取得與區域或可用區要求相關聯的 VM 作業清單:如果您傳送的是區域要求,如要在專案中搜尋所有作業和所有可用區,請使用
globalOperations.aggregatedList方法,並將operationGroupId屬性做為篩選器:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
如果您傳送的是可用區要求,請使用
zoneOperations.get方法,並在要求主體中加入operationGroupId屬性,列出該可用區中的作業:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert { ... "operationGroupId":"OPERATION_GROUP_ID" ... }
如要取得 VM 的其餘屬性,請執行下列任一操作:
在作業清單中,「
targetLink」代表 VM 的路徑。使用instances.get方法,並將這個路徑做為 VM 的名稱,即可取得 VM 的所有屬性:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
使用
instances.get方法,並搭配篩選器,其中包含作業清單中的 VM 名稱:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
使用
instances.aggregatedList方法 取得所有可用區和區域的 VM 屬性,並依執行個體專屬的標籤或名稱進行篩選:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
虛擬程式碼範例
下列虛擬程式碼範例說明如何自訂要求,大量建立 VM。
從一組區域中,在一個區域大量建立 VM
下列虛擬程式碼說明如何從一組區域中,在一個區域建立 1,000 個 VM。嘗試從一組區域在單一區域中大量建立 VM 時,要求會先檢查容量。如果容量不足,要求會立即失敗,並嘗試使用組合中的下一個區域。
指定要在可用區內建立的 VM 數量。
nTarget = 1000指定要嘗試建立 VM 的區域。
acceptableRegions = ["us-central1", "us-east1", "us-west1"]逐一檢查各個區域,並嘗試在每個區域中建立 VM,直到成功為止。
for region in acceptableRegions: call bulk API: region=region, location-policy=location-policy, count=nTarget if request succeeds and the operation succeeds: break
在可用區中大量建立特定機型的 VM
下列虛擬程式碼說明如何在可用區中,建立多個指定機型的 VM。嘗試大量建立相同機型的 VM 時,要求會先檢查這些機型的可用性。如果可用的機型數量不足,要求會立即失敗,並改用下一個機型重試。
指定要建立的 VM 數量和區域。
nTarget = 1000 region = "us-central1"指定要嘗試建立 VM 的機器家族。
acceptableMachineFamilies = ["n2","c2","e2","n1"]逐一嘗試建立機型的 VM,直到成功為止。
for family in acceptableMachineFamilies: call bulk APIs: region=region, count=nTarget, machineFamily=family if request succeeds and the operation succeeds: break
在一個可用區中建立超過 5,000 個 VM
大量建立 VM 時,每個要求最多只能建立 5,000 個 VM。 下列虛擬程式碼說明如何發出多項要求,在可用區中建立超過 5,000 個 VM。
指定要建立的 VM 數量、追蹤已建立 VM 總數的計數器、要建立 VM 的區域,以及儲存 Compute Engine 建立 VM 所在可用區的變數。
nTarget = 10000 nCreated = 0 region = "us-central1" targetZone = ""發出初始要求,建立 5,000 個 VM,儲存要求傳回的可用區,並更新已建立 VM 數量的計數器。
call bulk API: region=region, count=5000 targetZone = zone chosen by bulk API nCreated += # of VMs created繼續發出要求,在可用區中一次建立最多 5,000 個 VM,直到 Compute Engine 建立指定數量的 VM 為止。
while(nTarget - nCreated > 0): call bulk API: zone=targetZone, count=5000 nCreated += # of VMs created
大量建立 VM 並查看狀態
下列程序說明如何建立一組具有預先定義名稱的 VM,然後查看其狀態:
指定要建立的 VM 數量、建立 VM 的可用區,以及用於儲存名稱的資料結構。
nTarget = 1000 targetZone = "us-central-1a" names = []產生 VM 的模式化名稱,並將名稱新增至資料結構。
for n in range(0, 1000): names.push("instance-%d".format(n))建立 VM,並使用
perInstanceProperties指定名稱。call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)使用
instances.list方法,並篩選要傳回詳細資料的 VM 名稱,即可取得 VM 的詳細資料。instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
後續步驟
大量建立 VM 後,請執行下列任一或兩項操作,簡化這些 VM 的管理作業:
將 VM 新增至非代管執行個體群組。將 VM 新增至非受管理執行個體群組,即可使用 Cloud Monitoring。非代管執行個體群組不提供負載平衡或 VM 生命週期管理功能。
使用標籤。標籤可讓您使用鍵/值組合整理資源。