如果您要创建大量相同且彼此独立的虚拟机实例,请使用 Google Cloud CLI 或 Compute Engine API 批量创建虚拟机。您可以跨一个区域中的所有可用区创建这些虚拟机,也可以将这些虚拟机分布在特定可用区中。
如需了解详情和相关限制,请参阅虚拟机批量创建简介。 如果您想创建挂接了 GPU 的实例,请改为参阅批量创建 GPU 虚拟机。
准备工作
- 对于您打算创建的虚拟机和任何相关资源,请确保您有足够的配额和所需权限。
- 
  
  如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
  
   
   
     
   
  
   
   
     
   
  
   
   
     
   
  
 
 
 
  
    
      Select the tab for how you plan to use the samples on this page: 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 身份验证文档中的使用 REST 时进行身份验证。 所需的角色如需获得批量创建虚拟机所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含批量创建虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分: 所需权限批量创建虚拟机需要以下权限: - 
                  针对项目的 compute.instances.create权限
- 
                使用自定义映像创建虚拟机:针对映像的 compute.images.useReadOnly权限
- 
                使用快照创建虚拟机:针对快照的 compute.snapshots.useReadOnly权限
- 
                使用实例模板创建虚拟机:针对实例模板的 compute.instanceTemplates.useReadOnly权限
- 
                为虚拟机指定子网:针对项目或所选子网的 compute.subnetworks.use权限
- 
                为虚拟机指定静态 IP 地址:针对项目的 compute.addresses.use权限
- 
                在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的 compute.subnetworks.useExternalIp权限
- 
                为虚拟机分配旧版网络:针对项目的 compute.networks.use权限
- 
                使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的 compute.networks.useExternalIp权限
- 
                为虚拟机设置虚拟机实例元数据:针对项目的 compute.instances.setMetadata权限
- 
                为虚拟机设置标记:针对虚拟机的 compute.instances.setTags权限
- 
                为虚拟机设置标签:针对虚拟机的 compute.instances.setLabels权限
- 
                为虚拟机设置要使用的服务账号:针对虚拟机的 compute.instances.setServiceAccount权限
- 
                为虚拟机创建新磁盘:针对项目的 compute.disks.create权限
- 
                以只读或读写模式挂接现有磁盘:针对磁盘的 compute.disks.use权限
- 
                以只读模式挂接现有磁盘:针对磁盘的 compute.disks.useReadOnly权限
 在一个区域中批量创建虚拟机要在某个区域中批量创建虚拟机,请使用 gcloud CLI 或 Compute Engine API。 如果指定机器类型或支持其他硬件(如 GPU 或本地 SSD),则 Compute Engine 会将虚拟机放置在支持机器类型和其他硬件的区域的可用区中。 gcloud要在某个区域中批量创建虚拟机,请使用以下 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:虚拟机的名称模式。请使用哈希值 ( - #) 字符序列让 Compute Engine 将其替换为数字序列。例如,将- vm-#用于名称模式可生成名称为- vm-1、- vm-2等依次递增的虚拟机,数量最多为- --count指定的虚拟机数量(必须小于或等于名称模式允许的虚拟机数量)。- 使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。 
- PREDEFINED_NAMES:待创建虚拟机的预定义名称列表。如果使用此标志并指定 - COUNT,则- COUNT必须等于提供的名称数量。
- REGION:要在其中创建虚拟机的区域。 
- COUNT:要创建的虚拟机数量。此值必须小于或等于 - NAME_PATTERN允许的虚拟机数量。或者,如果使用- --predefined-names,则无需指定- COUNT,但一旦使用,则必须等于提供的名称的数量。
- MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为: - 值 - 说明 - 未设置 - 默认值为 - COUNT。如果 Compute Engine 无法创建- COUNT指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。- 1- Compute Engine 会创建尽可能多的虚拟机,最多 - COUNT个。- 大于 - 1且小于- COUNT- Compute Engine 会创建至少 - MIN_COUNT个虚拟机,最多- COUNT个虚拟机。如果无法创建- MIN_COUNT个虚拟机,则请求失败并且不会创建任何虚拟机。
- LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为 - allow(默认值)和- deny。以下是此标志的示例值:- --location-policy=us-east1-b=allow,us-east1-c=deny 
- TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用 - --location-policy标志指定可用区。下表显示了此标志的有效值:- 值 - 说明 - ANY_SINGLE_ZONE- 强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 - BALANCED- 尝试在该区域的所有可用区中均匀分布虚拟机。 - ANY- 允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。 
 REST要在某个区域中批量创建虚拟机,请使用以下 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:要在其中创建虚拟机的区域。 
- NAME_PATTERN:虚拟机的名称模式。指定此值或 - perInstanceProperties。请使用哈希值 (- #) 字符序列让 Compute Engine 将其替换为数字序列。例如,将- vm-#用于名称模式可生成名称为- vm-1、- vm-2等依次递增的虚拟机,数量最多为- --count指定的虚拟机数量(必须小于或等于名称模式允许的虚拟机数量)。- 使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。 
- PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...:待创建虚拟机的预定义名称列表。指定此值或 - namePattern。如果使用此标志并指定- COUNT,则- COUNT必须等于提供的名称数量。
- COUNT:要创建的虚拟机数量。此值必须小于或等于 - NAME_PATTERN允许的虚拟机数量。或者,如果使用- perInstanceProperties,则无需指定- COUNT,但一旦使用,则必须等于提供的名称的数量。
- MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为: - 值 - 说明 - 未设置 - 默认值为 - COUNT。如果 Compute Engine 无法创建- COUNT指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。- 1- Compute Engine 会创建尽可能多的虚拟机,最多 - COUNT个。- 大于 - 1且小于- COUNT- Compute Engine 会创建至少 - MIN_COUNT个虚拟机,最多- COUNT个虚拟机。如果无法创建- MIN_COUNT个虚拟机,则请求失败并且不会创建任何虚拟机。
- LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为 - ALLOW(默认值)和- DENY。以下是此字段的示例值:- "locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
- TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用 - locationPolicy字段指定可用区。下表显示了此字段的有效值:- 值 - 说明 - ANY_SINGLE_ZONE- 强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 - BALANCED- 尝试在该区域的所有可用区中均匀分布虚拟机。 - ANY- 允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。 
 在一个可用区中批量创建虚拟机要在某个可用区中批量创建虚拟机,请使用 gcloud CLI 或 Compute Engine API。 gcloud要在某个特定可用区中批量创建虚拟机,请使用以下 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:虚拟机的名称模式。请使用哈希值 ( - #) 字符序列让 Compute Engine 将其替换为数字序列。例如,将- vm-#用于名称模式可生成名称为- vm-1、- vm-2等依次递增的虚拟机,数量最多为- --count指定的虚拟机数量(必须小于或等于名称模式允许的虚拟机数量)。- 使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。 
- PREDEFINED_NAMES:待创建虚拟机的预定义名称列表。如果使用此标志并指定 - COUNT,则- COUNT必须等于提供的名称数量。
- ZONE:要在其中创建虚拟机的可用区。 
- COUNT:要创建的虚拟机数量。此值必须小于或等于 - NAME_PATTERN允许的虚拟机数量。或者,如果使用- --predefined-names,则无需指定- COUNT,但一旦使用,则必须等于提供的名称的数量。
- MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为: - 值 - 说明 - 未设置 - 默认值为 - COUNT。如果 Compute Engine 无法创建- COUNT指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。- 1- Compute Engine 会创建尽可能多的虚拟机,最多 - COUNT个。- 大于 - 1且小于- COUNT- Compute Engine 会创建至少 - MIN_COUNT个虚拟机,最多- COUNT个虚拟机。如果无法创建- MIN_COUNT个虚拟机,则请求失败并且不会创建任何虚拟机。
 REST要在某个可用区中批量创建虚拟机,请使用以下 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:要在其中创建虚拟机的可用区。 
- NAME_PATTERN:虚拟机的名称模式。指定此值或 - perInstanceProperties。请使用哈希值 (- #) 字符序列让 Compute Engine 将其替换为数字序列。例如,将- vm-#用于名称模式可生成名称为- vm-1、- vm-2等依次递增的虚拟机,数量最多为- --count指定的虚拟机数量(必须小于或等于名称模式允许的虚拟机数量)。- 使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。 
- PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...:待创建虚拟机的预定义名称列表。指定此值或 - namePattern。如果使用此标志并指定- COUNT,则- COUNT必须等于提供的名称数量。
- COUNT:要创建的虚拟机数量。此值必须小于或等于 - NAME_PATTERN允许的虚拟机数量。或者,如果使用- perInstanceProperties,则无需指定- COUNT,但一旦使用,则必须等于提供的名称的数量。
- MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为: - 值 - 说明 - 未设置 - 默认值为 - COUNT。如果 Compute Engine 无法创建- COUNT指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。- 1- Compute Engine 会创建尽可能多的虚拟机,最多 - COUNT个。- 大于 - 1且小于- COUNT- Compute Engine 会创建至少 - MIN_COUNT个虚拟机,最多- COUNT个虚拟机。如果无法创建- MIN_COUNT个虚拟机,则请求失败并且不会创建任何虚拟机。
 批量创建使用自定义主机名的虚拟机您可以使用 gcloud CLI 或 Compute Engine API 在一个区域或可用区中批量创建具有自定义主机名的虚拟机。 您必须手动配置自定义主机名的 DNS 记录。如需了解详情,请参阅限制。 如果您没有指定主机名,Compute Engine 会将虚拟机的主机名设置为以下其中一项: - VM_NAME.c.PROJECT_ID.internal(如果启用全球 DNS)
- VM_NAME.ZONE.c.PROJECT_ID.internal(如果启用可用区级 DNS)
 如需了解详情,请参阅内部 DNS 名称。 gcloud如需在特定区域中批量创建具有自定义主机名的虚拟机,请使用以下 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:虚拟机的名称模式。请使用哈希值 ( - #) 字符序列让 Compute Engine 将其替换为数字序列。例如,将- vm-#用于名称模式可生成名称为- vm-1、- vm-2等依次递增的虚拟机,数量最多为- --count指定的虚拟机数量(必须小于或等于名称模式允许的虚拟机数量)。- 使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。 
- PREDEFINED_NAMES:待创建虚拟机的预定义名称列表。如果使用此标志并指定 - COUNT,则- COUNT必须等于提供的名称数量。
- [VM_NAME=HOSTNAME, …]:虚拟机的预定义名称以及您要为虚拟机分配的完全限定网域主机名的键值对列表。自定义主机名必须符合 RFC 1035 要求才是有效主机名。 
- REGION:要在其中创建虚拟机的可用区。 
- COUNT:要创建的虚拟机数量。此值必须小于或等于 - NAME_PATTERN允许的虚拟机数量。或者,如果使用- --predefined-names,则无需指定- COUNT,但一旦使用,则必须等于提供的名称的数量。
- MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为: - 值 - 说明 - 未设置 - 默认值为 - COUNT。如果 Compute Engine 无法创建- COUNT指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。- 1- Compute Engine 会创建尽可能多的虚拟机,最多 - COUNT个。- 大于 - 1且小于- COUNT- Compute Engine 会创建至少 - MIN_COUNT个虚拟机,最多- COUNT个虚拟机。如果无法创建- MIN_COUNT个虚拟机,则请求失败并且不会创建任何虚拟机。
- LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为 - ALLOW(默认值)和- DENY。以下是此字段的示例值:- "locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
- TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用 - locationPolicy字段指定可用区。下表显示了此字段的有效值:- 值 - 说明 - ANY_SINGLE_ZONE- 强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 - BALANCED- 尝试在该区域的所有可用区中均匀分布虚拟机。 - ANY- 允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。 
 REST如需在特定区域中批量创建具有自定义主机名的虚拟机,请使用以下 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:要在其中创建虚拟机的区域。 
- NAME_PATTERN:虚拟机的名称模式。指定此值或 - perInstanceProperties。请使用哈希值 (- #) 字符序列让 Compute Engine 将其替换为数字序列。例如,将- vm-#用于名称模式可生成名称为- vm-1、- vm-2等依次递增的虚拟机,数量最多为- --count指定的虚拟机数量(必须小于或等于名称模式允许的虚拟机数量)。- 使用名称模式时,Compute Engine 会尝试通过检查根据先前请求创建的现有虚拟机的名称来避免名称冲突。 
- PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...:待创建虚拟机的预定义名称列表。指定此值或 - namePattern。如果使用此标志并指定- COUNT,则- COUNT必须等于提供的名称数量。
- HOSTNAME_1、HOSTNAME_2、…:您要为虚拟机分配的完全限定网域主机名。自定义主机名必须符合 RFC 1035 要求才是有效主机名。 - 例如,如需分别创建两个具有自定义主机名 - my-host1234.example.com和- test.example.com的虚拟机- vm-1和- vm-2,请在- perInstanceProperties中指定- hostname属性,如下所示:- { ... "perInstanceProperties": { "vm-1": { "hostname": "my-host1234.example.com" }, "vm-2": { "hostname": "test.example.com" }, ...} },
- COUNT:要创建的虚拟机数量。此值必须小于或等于 - NAME_PATTERN允许的虚拟机数量。或者,如果使用- perInstanceProperties,则无需指定- COUNT,但一旦使用,则必须等于提供的名称的数量。
- MIN_COUNT:要创建的虚拟机数下限。下表根据您设置此标志的方式介绍了请求的行为: - 值 - 说明 - 未设置 - 默认值为 - COUNT。如果 Compute Engine 无法创建- COUNT指定的虚拟机数量,则请求失败并且不会创建任何虚拟机。- 1- Compute Engine 会创建尽可能多的虚拟机,最多 - COUNT个。- 大于 - 1且小于- COUNT- Compute Engine 会创建至少 - MIN_COUNT个虚拟机,最多- COUNT个虚拟机。如果无法创建- MIN_COUNT个虚拟机,则请求失败并且不会创建任何虚拟机。
- LOCATION_POLICY:要包含或排除的区域内可用区。使用键值对列表,将可用区作为键,政策作为值。政策的有效值为 - ALLOW(默认值)和- DENY。以下是此字段的示例值:- "locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
- TARGET_DISTRIBUTION_SHAPE:虚拟机在指定可用区中的分布。使用 - locationPolicy字段指定可用区。下表显示了此字段的有效值:- 值 - 说明 - ANY_SINGLE_ZONE- 强制在单个可用区中部署虚拟机,并优先利用未使用的预留。使用此值可避免跨可用区网络出站流量或缩短网络延迟时间。此设置为默认值。 - BALANCED- 尝试在该区域的所有可用区中均匀分布虚拟机。 - ANY- 允许在一个区域中的多个可用区分布虚拟机。选择具有可用资源并最大化利用未使用的可用区级预留的可用区。 
 检查批量创建虚拟机的请求的状态当您创建变更请求时,Compute Engine 会返回一个 operation资源,您可以轮询该资源以获取操作的状态。如需了解详情,请参阅处理 API 响应。如需获取批量插入请求的状态,请向 operation资源发送 HTTPGET请求: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:您要在其中创建虚拟机的项目的 ID
- REGION:您要在其中创建虚拟机的区域
- ZONE:您要在其中创建虚拟机的可用区
- OPERATION_ID:批量插入操作 ID
 响应中的 instancesBulkInsertOperationMetadata对象包含perLocationStatus字段中按区域划分的操作详细信息。对于批量创建请求中包含的每个时区,perLocationStatus包含以下字段:- status:状态是以下项之一:- CREATING:相应可用区中的虚拟机创建正在进行。
- ROLLING_BACK:请求在相应可用区中失败,并且正在回滚。
- DONE:虚拟机创建或回滚已在相应可用区中成功完成。
 
- targetVmCount:Compute Engine 尝试在相应可用区中创建的虚拟机的数量。 Compute Engine 会在初始检查后确定此数量,并且在操作期间不会更改。当您检查操作状态时,此字段始终会显示在每个可用区中。
- createdVmCount:已在相应可用区中创建的虚拟机的数量。对于给定的时区,此值不超过- targetVmCount。- failedToCreateVmCount:未能在相应可用区中创建的虚拟机的数量。
- deletedVmCount:在回滚失败操作的过程中,在相应可用区中删除的虚拟机的数量。
 
 响应中的 progress字段表示操作的完成百分比。在 Compute Engine 至少成功创建最少数量的虚拟机并且不再发生虚拟机创建或请求回滚之前,批量插入操作的状态为 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指定的最少数量的虚拟机或者 Compute Engine 完成请求回滚时,操作会返回DONE状态。成功创建请求数量的虚拟机后,您会收到如下所示的响应:{ "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对象的文档。检查单个虚拟机的状态如需检查通过批量创建虚拟机的请求创建的单个虚拟机的状态,请使用 gcloud CLI 或 Compute Engine API。 gcloud- 从请求返回的 - Operation中获取- operationGroupId属性的值。
- 将 - operationGroupId属性用作- gcloud compute operations list命令中的过滤条件,以在项目中的所有操作和所有可用区中搜索与区域或可用区级请求关联的虚拟机:- gcloud compute operations list \ --filter=(operationGroupId=OPERATION_GROUP_ID) 
- 执行以下任一操作,以获取虚拟机的其余属性: - 在操作列表中, - targetLink表示虚拟机的路径。在- gcloud compute instances describe命令中,以此路径作为虚拟机的名称来获取虚拟机的属性:- gcloud compute instances describe VM_NAME 
- 在 - gcloud compute instances list方法中,使用包含操作列表中虚拟机名称的过滤条件:- gcloud compute instances list VM_NAME \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2) 
- 使用 - gcloud compute instances list命令获取所有可用区和区域中的虚拟机属性,并按实例独有的标签进行过滤,或者他们的姓名:- gcloud compute instances list \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2) 
 
 REST- 从请求返回的 - Operation中获取- operationGroupId属性的值。
- 使用 - operationGroupId属性获取与区域级或可用区级请求关联的虚拟机操作列表:- 如果您发送了区域级请求,则如需在项目中的所有操作和所有可用区中进行搜索,请使用 - 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" ... }
 
- 执行以下任一操作,以获取虚拟机的其余属性: - 在操作列表中, - targetLink表示虚拟机的路径。在- instances.get方法中,以此路径作为虚拟机的名称来获取虚拟机的所有属性:- GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME 
- 将 - instances.get方法与包含操作列表中虚拟机名称的过滤条件结合使用:- 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方法可从所有可用区和区域获取虚拟机属性,并按实例独有的标签进行过滤,或者他们的姓名:- GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2) 
 
 伪代码示例以下伪代码示例展示了如何对批量创建虚拟机的请求进行自定义。 在一组区域中的一个区域内批量创建虚拟机以下伪代码介绍了如何在一组区域中的一个区域内创建 1000 个虚拟机。尝试在一组区域中的一个区域内批量创建虚拟机时,请求会首先检查容量。如果容量不足,则请求会立即失败,并使用该组区域中的下一个区域再次尝试。 - 指定要在可用区内创建的虚拟机数量。 - nTarget = 1000
- 指定要在其中创建虚拟机的区域。 - acceptableRegions = ["us-central1", "us-east1", "us-west1"]
- 迭代这些区域,并尝试在每个区域中创建虚拟机,直到成功。 - for region in acceptableRegions: call bulk API: region=region, location-policy=location-policy, count=nTarget if request succeeds and the operation succeeds: break
 在一个可用区中批量创建虚拟机在机器类型上 以下伪代码介绍了如何在一个可用区中创建指定机器类型上的多个虚拟机。尝试在同一机器类型上批量创建虚拟机时,请求会首先检查这些机器类型的可用性。如果该机器类型没有足够的可用机器,则请求将立即失败,然后使用下一个机器类型再次尝试。 - 指定要创建的虚拟机数量以及创建它们的区域。 - nTarget = 1000 region = "us-central1"
- 指定要在其上创建虚拟机的机器系列。 - acceptableMachineFamilies = ["n2","c2","e2","n1"]
- 迭代该组机器类型,并尝试在机器类型上创建虚拟机,直到成功为止。 - for family in acceptableMachineFamilies: call bulk APIs: region=region, count=nTarget, machineFamily=family if request succeeds and the operation succeeds: break
 在一个可用区中创建超过 5,000 个虚拟机批量创建虚拟机时,每个请求只能创建 5,000 个虚拟机。以下伪代码介绍了如何通过发出多个请求在一个可用区中创建超过 5,000 个虚拟机。 - 指定要创建的虚拟机的数量,用于跟踪已创建的虚拟机总数的计数器、要在其中创建虚拟机的区域以及用于存储 Compute Engine 在其中创建虚拟机的可用区的变量。 - nTarget = 10000 nCreated = 0 region = "us-central1" targetZone = ""
- 发出创建 5,000 个虚拟机的初始请求,保存请求返回的可用区,并更新所创建虚拟机数量的计数器。 - call bulk API: region=region, count=5000 targetZone = zone chosen by bulk API nCreated += # of VMs created
- 继续发出在该可用区中一次最多创建 5,000 个虚拟机的请求,直到 Compute Engine 创建指定数量的虚拟机。 - while(nTarget - nCreated > 0): call bulk API: zone=targetZone, count=5000 nCreated += # of VMs created
 批量创建虚拟机并查看其状态以下过程展示了如何创建一组具有预定义名称的虚拟机,然后查看它们的状态: - 指定要创建的虚拟机数量、要在其中创建虚拟机的可用区,以及用于存储名称的数据结构。 - nTarget = 1000 targetZone = "us-central-1a" names = []
- 为虚拟机生成带模式的名称,并将名称添加到数据结构。 - for n in range(0, 1000): names.push("instance-%d".format(n))
- 创建虚拟机,并使用 - perInstanceProperties指定名称。- call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
- 使用 - instances.list方法和用于返回其详细信息的虚拟机名称的过滤条件来获取虚拟机的详细信息。- instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
 后续步骤批量创建虚拟机后,请执行以下一项或两项操作,以简化这些虚拟机的管理: - 将虚拟机添加到非代管式实例组。将虚拟机添加到非代管式实例组可让您使用 Cloud Monitoring。非托管式实例组不提供负载均衡或虚拟机生命周期管理。 
- 使用标签。通过标签,您可以使用键值对组织资源。 
 如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。 最后更新时间 (UTC):2025-10-19。 -