Si quieres crear un gran número de instancias de máquinas virtuales (VM) idénticas e independientes entre sí, puedes hacerlo de forma masiva mediante la CLI de Google Cloud o la API de Compute Engine. Puedes crear estas VMs en todas las zonas de una región o distribuirlas en determinadas zonas.
Para obtener más información y las limitaciones asociadas, consulta Información sobre la creación de VMs en bloque. Si quieres crear instancias con GPUs vinculadas, consulta el artículo Crear VMs con GPU en bloque.
Antes de empezar
- En el caso de las VMs y los recursos relacionados que quieras crear, asegúrate de que tienes suficiente cuota y los permisos necesarios.
-
Si aún no lo has hecho, configura la autenticación.
La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
Select the tab for how you plan to use the samples on this page:
gcloud
-
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
- Set a default region and zone.
REST
Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .
Roles obligatorios
Para obtener los permisos que necesitas para crear VMs en bloque, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de instancias de Compute (v. 1) (
roles/compute.instanceAdmin.v1
) en el proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.Este rol predefinido contiene los permisos necesarios para crear máquinas virtuales en bloque. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para crear VMs en bloque, se necesitan los siguientes permisos:
-
compute.instances.create
del proyecto -
Para usar una imagen personalizada para crear la VM, sigue estos pasos:
compute.images.useReadOnly
en la imagen -
Para usar una captura para crear la VM, sigue estos pasos:
compute.snapshots.useReadOnly
en la captura -
Para usar una plantilla de instancia para crear la VM, haz lo siguiente:
compute.instanceTemplates.useReadOnly
en la plantilla de instancia -
Para asignar una red antigua a la VM, sigue estos pasos:
compute.networks.use
en el proyecto -
Para especificar una dirección IP estática para la máquina virtual, haz lo siguiente:
compute.addresses.use
en el proyecto -
Para asignar una dirección IP externa a la VM cuando se usa una red antigua, haz lo siguiente:
compute.networks.useExternalIp
en el proyecto -
Para especificar una subred para tu VM, haz lo siguiente:
compute.subnetworks.use
en el proyecto o en la subred elegida -
Para asignar una dirección IP externa a la VM cuando se usa una red de VPC, sigue estos pasos:
compute.subnetworks.useExternalIp
en el proyecto o en la subred elegida -
Para definir los metadatos de la instancia de VM:
compute.instances.setMetadata
en el proyecto -
Para definir etiquetas en la VM, haz lo siguiente:
compute.instances.setTags
en la VM -
Para definir etiquetas en la VM, sigue estos pasos:
compute.instances.setLabels
en la VM -
Para definir una cuenta de servicio que pueda usar la VM, sigue estos pasos:
compute.instances.setServiceAccount
en la VM -
Para crear un disco para la VM, sigue estos pasos:
compute.disks.create
en el proyecto -
Para adjuntar un disco en modo de solo lectura o de lectura y escritura, sigue estos pasos:
compute.disks.use
en el disco -
Para adjuntar un disco en modo de solo lectura, sigue estos pasos:
compute.disks.useReadOnly
en el disco
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Crear VMs en bloque en una región
Para crear máquinas virtuales en bloque en una región, usa la CLI de gcloud o la API de Compute Engine.
Si especificas un tipo de máquina o la compatibilidad con hardware adicional, como una GPU o un SSD local, Compute Engine colocará las VMs en una zona de la región que admita el tipo de máquina y el hardware adicional.
gcloud
Para crear VMs de forma masiva en una región, usa el siguiente
gcloud compute instances bulk create
comando: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 ]
Haz los cambios siguientes:
NAME_PATTERN: el patrón de nombre de las VMs. Usa una secuencia de caracteres de almohadilla (
#
) para que Compute Engine la sustituya por una secuencia de números. Por ejemplo, si usasvm-#
como patrón de nombre, se generarán VMs con nombres comovm-1
yvm-2
, hasta el número de VMs especificado por--count
, que debe ser igual o inferior al número de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombres comprobando los nombres de las VMs creadas a partir de solicitudes anteriores.
PREDEFINED_NAMES: una lista de nombres predefinidos para las VMs que se van a crear. Si usas esta marca y especificas
COUNT
,COUNT
debe ser igual al número de nombres proporcionados.REGION: la región en la que se crearán las VMs.
COUNT: número de VMs que se van a crear. Este valor debe ser menor o igual que el número de máquinas virtuales permitidas por
NAME_PATTERN
. Si usa--predefined-names
, no tiene que especificarCOUNT
, pero si lo hace, debe ser igual al número de nombres proporcionados.MIN_COUNT: número mínimo de máquinas virtuales que se van a crear. En la siguiente tabla se describe el comportamiento de la solicitud en función de cómo definas esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear el número de VMs especificado porCOUNT
, la solicitud falla y no se crea ninguna VM.1
Compute Engine crea tantas máquinas virtuales como sea posible, hasta un máximo de COUNT
.Mayor que 1
y menor queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs y un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y no se crea ninguna VM.LOCATION_POLICY: las zonas que se van a incluir o excluir de una región. Use una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos de la política son
allow
(el valor predeterminado) ydeny
. A continuación, se muestra un valor de ejemplo de esta marca:--location-policy=us-east1-b=allow,us-east1-c=deny
TARGET_DISTRIBUTION_SHAPE: la distribución de las VMs en las zonas especificadas. Usa la marca
--location-policy
para especificar las zonas. En la siguiente tabla se muestran los valores válidos de esta marca:Valor Descripción ANY_SINGLE_ZONE
Fuerza la colocación de las VMs en una sola zona y prioriza la utilización de las reservas no utilizadas. Úsalo para evitar el tráfico saliente de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de forma uniforme entre todas las zonas de la región. ANY
Permite distribuir las máquinas virtuales en varias zonas de una región. Elige las zonas que tienen recursos disponibles y que maximizan las reservas zonales sin usar.
REST
Para crear VMs en bloque en una región, usa el siguiente
instances.bulkInsert
método: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" ... }
Haz los cambios siguientes:
PROJECT_ID: el ID del proyecto.
REGION: la región en la que se crearán las VMs.
NAME_PATTERN: el patrón de nombre de las VMs. Especifica esto o
perInstanceProperties
. Usa una secuencia de caracteres de almohadilla (#
) para que Compute Engine la sustituya por una secuencia de números. Por ejemplo, si usasvm-#
como patrón de nombre, se generarán VMs con nombres comovm-1
yvm-2
, hasta el número de VMs especificado por--count
, que debe ser igual o inferior al número de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombres comprobando los nombres de las VMs creadas a partir de solicitudes anteriores.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: lista de nombres predefinidos de las VMs que se van a crear. Especifica esta opción o
namePattern
. Si se usa esta marca y se especificaCOUNT
,COUNT
debe ser igual al número de nombres proporcionados.COUNT: número de VMs que se van a crear. Este valor debe ser menor o igual que el número de máquinas virtuales permitidas por
NAME_PATTERN
. Si usaperInstanceProperties
, no tiene que especificarCOUNT
, pero, si lo hace, debe ser igual al número de nombres proporcionados.MIN_COUNT: número mínimo de máquinas virtuales que se van a crear. En la siguiente tabla se describe el comportamiento de la solicitud en función de cómo definas esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear el número de VMs especificado porCOUNT
, la solicitud falla y no se crea ninguna VM.1
Compute Engine crea tantas máquinas virtuales como sea posible, hasta un máximo de COUNT
.Mayor que 1
y menor queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs y un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y no se crea ninguna VM.LOCATION_POLICY: las zonas que se van a incluir o excluir de una región. Use una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos de la política son
ALLOW
(el valor predeterminado) yDENY
. A continuación, se muestra un valor de ejemplo de este campo:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
TARGET_DISTRIBUTION_SHAPE: la distribución de las VMs en las zonas especificadas. Usa el campo
locationPolicy
para especificar las zonas. En la siguiente tabla se muestran los valores válidos de este campo:Valor Descripción ANY_SINGLE_ZONE
Fuerza la colocación de las VMs en una sola zona y prioriza la utilización de las reservas no utilizadas. Úsalo para evitar el tráfico saliente de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de forma uniforme entre todas las zonas de la región. ANY
Permite distribuir las máquinas virtuales en varias zonas de una región. Elige las zonas que tienen recursos disponibles y que maximizan las reservas zonales sin usar.
Crear máquinas virtuales en bloque en una zona
Para crear máquinas virtuales en bloque en una zona, usa la CLI de gcloud o la API de Compute Engine.
gcloud
Para crear VMs de forma masiva en una zona específica, usa el siguiente
gcloud compute instances bulk create
comando.gcloud compute instances bulk create \ ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \ --zone=ZONE \ --count=COUNT \ [ --min-count=MIN_COUNT ]
Haz los cambios siguientes:
NAME_PATTERN: el patrón de nombre de las VMs. Usa una secuencia de caracteres de almohadilla (
#
) para que Compute Engine la sustituya por una secuencia de números. Por ejemplo, si usasvm-#
como patrón de nombre, se generarán VMs con nombres comovm-1
yvm-2
, hasta el número de VMs especificado por--count
, que debe ser igual o inferior al número de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombres comprobando los nombres de las VMs creadas a partir de solicitudes anteriores.
PREDEFINED_NAMES: una lista de nombres predefinidos para las VMs que se van a crear. Si usas esta marca y especificas
COUNT
,COUNT
debe ser igual al número de nombres proporcionados.ZONE: la zona en la que se crearán las VMs.
COUNT: número de VMs que se van a crear. Este valor debe ser menor o igual que el número de máquinas virtuales permitidas por
NAME_PATTERN
. Si usa--predefined-names
, no tiene que especificarCOUNT
, pero si lo hace, debe ser igual al número de nombres proporcionados.MIN_COUNT: número mínimo de máquinas virtuales que se van a crear. En la siguiente tabla se describe el comportamiento de la solicitud en función de cómo definas esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear el número de VMs especificado porCOUNT
, la solicitud falla y no se crea ninguna VM.1
Compute Engine crea tantas máquinas virtuales como sea posible, hasta un máximo de COUNT
.Mayor que 1
y menor queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs y un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y no se crea ninguna VM.
REST
Para crear VMs en bloque en una zona, usa el siguiente
instances.bulkInsert
método.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, ... }
Haz los cambios siguientes:
PROJECT_ID: el ID del proyecto.
ZONE: la zona en la que se crearán las VMs.
NAME_PATTERN: el patrón de nombre de las VMs. Especifica esto o
perInstanceProperties
. Usa una secuencia de caracteres de almohadilla (#
) para que Compute Engine la sustituya por una secuencia de números. Por ejemplo, si usasvm-#
como patrón de nombre, se generarán VMs con nombres comovm-1
yvm-2
, hasta el número de VMs especificado por--count
, que debe ser igual o inferior al número de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombres comprobando los nombres de las VMs creadas a partir de solicitudes anteriores.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: lista de nombres predefinidos de las VMs que se van a crear. Especifica esta opción o
namePattern
. Si se usa esta marca y se especificaCOUNT
,COUNT
debe ser igual al número de nombres proporcionados.COUNT: número de VMs que se van a crear. Este valor debe ser menor o igual que el número de máquinas virtuales permitidas por
NAME_PATTERN
. Si usaperInstanceProperties
, no tiene que especificarCOUNT
, pero, si lo hace, debe ser igual al número de nombres proporcionados.MIN_COUNT: número mínimo de máquinas virtuales que se van a crear. En la siguiente tabla se describe el comportamiento de la solicitud en función de cómo definas esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear el número de VMs especificado porCOUNT
, la solicitud falla y no se crea ninguna VM.1
Compute Engine crea tantas máquinas virtuales como sea posible, hasta un máximo de COUNT
.Mayor que 1
y menor queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs y un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y no se crea ninguna VM.
Crear VMs con nombres de host personalizados en bloque
Puedes crear máquinas virtuales con nombres de host personalizados en bloque en una región o en una zona mediante la CLI de gcloud o la API de Compute Engine.
Debes configurar manualmente el registro DNS de tu nombre de host personalizado. Para obtener más información, consulta las limitaciones.
Si no especificas un nombre de host, Compute Engine asignará a las VMs uno de los siguientes:
VM_NAME.c.PROJECT_ID.internal
cuando habilitas el DNS globalVM_NAME.ZONE.c.PROJECT_ID.internal
cuando habilitas el DNS zonal
Para obtener más información, consulta Nombres de DNS internos.
gcloud
Para crear VMs de forma masiva con nombres de host personalizados en una región específica, usa el siguiente
gcloud beta compute instances bulk create
comando.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 ]
Haz los cambios siguientes:
NAME_PATTERN: el patrón de nombre de las VMs. Usa una secuencia de caracteres de almohadilla (
#
) para que Compute Engine la sustituya por una secuencia de números. Por ejemplo, si usasvm-#
como patrón de nombre, se generarán VMs con nombres comovm-1
yvm-2
, hasta el número de VMs especificado por--count
, que debe ser igual o inferior al número de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombres comprobando los nombres de las VMs creadas a partir de solicitudes anteriores.
PREDEFINED_NAMES: una lista de nombres predefinidos para las VMs que se van a crear. Si usas esta marca y especificas
COUNT
,COUNT
debe ser igual al número de nombres proporcionados.[VM_NAME=HOSTNAME, ...]: una lista de pares clave-valor de nombres predefinidos para las VMs y nombres de host de dominio completos que quieras asignar a las VMs. Los nombres de host personalizados deben cumplir los requisitos de la RFC 1035 para que sean válidos.
REGION: la zona en la que se crearán las VMs.
COUNT: número de VMs que se van a crear. Este valor debe ser menor o igual que el número de máquinas virtuales permitidas por
NAME_PATTERN
. Si usa--predefined-names
, no tiene que especificarCOUNT
, pero si lo hace, debe ser igual al número de nombres proporcionados.MIN_COUNT: número mínimo de máquinas virtuales que se van a crear. En la siguiente tabla se describe el comportamiento de la solicitud en función de cómo definas esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear el número de VMs especificado porCOUNT
, la solicitud falla y no se crea ninguna VM.1
Compute Engine crea tantas máquinas virtuales como sea posible, hasta un máximo de COUNT
.Mayor que 1
y menor queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs y un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y no se crea ninguna VM.LOCATION_POLICY: las zonas que se van a incluir o excluir de una región. Use una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos de la política son
ALLOW
(el valor predeterminado) yDENY
. A continuación, se muestra un valor de ejemplo de este campo:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
TARGET_DISTRIBUTION_SHAPE: la distribución de las VMs en las zonas especificadas. Usa el campo
locationPolicy
para especificar las zonas. En la siguiente tabla se muestran los valores válidos de este campo:Valor Descripción ANY_SINGLE_ZONE
Fuerza la colocación de las VMs en una sola zona y prioriza la utilización de las reservas no utilizadas. Úsalo para evitar el tráfico saliente de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de forma uniforme entre todas las zonas de la región. ANY
Permite distribuir las máquinas virtuales en varias zonas de una región. Elige las zonas que tienen recursos disponibles y que maximizan las reservas zonales sin usar.
REST
Para crear VMs con nombres de host personalizados de forma masiva en una región específica, usa el siguiente
instances.bulkInsert
método: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" ... }
Haz los cambios siguientes:
PROJECT_ID: el ID del proyecto.
REGION: la región en la que se crearán las VMs.
NAME_PATTERN: el patrón de nombre de las VMs. Especifica esto o
perInstanceProperties
. Usa una secuencia de caracteres de almohadilla (#
) para que Compute Engine la sustituya por una secuencia de números. Por ejemplo, si usasvm-#
como patrón de nombre, se generarán VMs con nombres comovm-1
yvm-2
, hasta el número de VMs especificado por--count
, que debe ser igual o inferior al número de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombres comprobando los nombres de las VMs creadas a partir de solicitudes anteriores.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: lista de nombres predefinidos de las VMs que se van a crear. Especifica esta opción o
namePattern
. Si se usa esta marca y se especificaCOUNT
,COUNT
debe ser igual al número de nombres proporcionados.HOSTNAME_1, HOSTNAME_2, ...: nombres de host de dominio completos que quieras asignar a las VMs. Los nombres de host personalizados deben cumplir los requisitos de la RFC 1035 para que sean válidos.
Por ejemplo, para crear dos VMs,
vm-1
yvm-2
, con los nombres de host personalizadosmy-host1234.example.com
ytest.example.com
, respectivamente, especifica la propiedadhostname
enperInstanceProperties
de la siguiente manera:{ ... "perInstanceProperties": { "vm-1": { "hostname": "my-host1234.example.com" }, "vm-2": { "hostname": "test.example.com" }, ... },
COUNT: número de VMs que se van a crear. Este valor debe ser menor o igual que el número de máquinas virtuales permitidas por
NAME_PATTERN
. Si usaperInstanceProperties
, no tiene que especificarCOUNT
, pero, si lo hace, debe ser igual al número de nombres proporcionados.MIN_COUNT: número mínimo de máquinas virtuales que se van a crear. En la siguiente tabla se describe el comportamiento de la solicitud en función de cómo definas esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear el número de VMs especificado porCOUNT
, la solicitud falla y no se crea ninguna VM.1
Compute Engine crea tantas máquinas virtuales como sea posible, hasta un máximo de COUNT
.Mayor que 1
y menor queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs y un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y no se crea ninguna VM.LOCATION_POLICY: las zonas que se van a incluir o excluir de una región. Use una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos de la política son
ALLOW
(el valor predeterminado) yDENY
. A continuación, se muestra un valor de ejemplo de este campo:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },
TARGET_DISTRIBUTION_SHAPE: la distribución de las VMs en las zonas especificadas. Usa el campo
locationPolicy
para especificar las zonas. En la siguiente tabla se muestran los valores válidos de este campo:Valor Descripción ANY_SINGLE_ZONE
Fuerza la colocación de las VMs en una sola zona y prioriza la utilización de las reservas no utilizadas. Úsalo para evitar el tráfico saliente de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de forma uniforme entre todas las zonas de la región. ANY
Permite distribuir las máquinas virtuales en varias zonas de una región. Elige las zonas que tienen recursos disponibles y que maximizan las reservas zonales sin usar.
Consultar el estado de una solicitud para crear VMs en bloque
Cuando creas una solicitud de mutación, Compute Engine devuelve un recurso
operation
que puedes sondear para obtener el estado de la operación. Para obtener más información, consulta Gestionar respuestas de la API.Para obtener el estado de una solicitud de inserción masiva, envía una solicitud HTTP
GET
al recursooperation
:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID
Para obtener el estado de una solicitud de inserción en bloque regional, envía la siguiente solicitud:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que vas a crear las VMsREGION
: la región en la que vas a crear las VMsZONE
: la zona en la que vas a crear las VMs.OPERATION_ID
: el ID de la operación de inserción en bloque
El objeto
instancesBulkInsertOperationMetadata
de la respuesta contiene los siguientes detalles de la operación:status
: el estado es uno de los siguientes:CREATING
: la creación de la VM está en cursoROLLING_BACK
: la solicitud ha fallado y se está revirtiendoDONE
: se ha completado correctamente la creación o la restauración de la VM
targetVmCount
: número de VMs que se van a crear en la zona especificadacreatedVmCount
: número de VMs ya creadas en la zona especificadafailedToCreateVmCount
: número de VMs que no se han podido crear en la zona especificadadeletedVmCount
: número de VMs que se han eliminado al revertir una operación fallida
El campo
progress
de la respuesta representa el porcentaje de finalización de la operación.El estado de la operación de inserción masiva es
RUNNING
hasta que Compute Engine crea correctamente al menos el número mínimo de VMs y no se creen más VMs ni se revierta la solicitud.Mientras se esté llevando a cabo la operación de inserción en bloque, debería ver una respuesta similar a la siguiente:
{ "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 } } } }
En este ejemplo, se ha creado una instancia correctamente y la operación se ha completado al 2 %.
La operación devuelve el estado
DONE
cuando Compute Engine crea correctamente al menos el número mínimo de VMs especificado porminCount
o cuando Compute Engine completa la reversión de la solicitud. Una vez que se hayan creado correctamente las VMs solicitadas, recibirás una respuesta similar a la siguiente:{ "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" }
Para obtener más información, consulta la documentación del objeto
instancesBulkInsertOperationMetadata
.Consultar el estado de una sola máquina virtual
Para comprobar el estado de una sola máquina virtual creada a partir de una solicitud para crear máquinas virtuales en bloque, usa la CLI de gcloud o la API Compute Engine.
gcloud
En el
Operation
devuelto por la solicitud, obtén el valor de la propiedadoperationGroupId
.Usa la propiedad
operationGroupId
como filtro con el comandogcloud compute operations list
para buscar en todas las operaciones y zonas del proyecto las VMs asociadas a la solicitud regional o zonal:gcloud compute operations list \ --filter=(operationGroupId=OPERATION_GROUP_ID)
Para obtener el resto de las propiedades de la máquina virtual, haga lo siguiente:
En la lista de operaciones,
targetLink
representa la ruta de la VM. Usa elgcloud compute instances describe
comando con esta ruta como nombre de la VM para obtener sus propiedades:gcloud compute instances describe VM_NAME
Usa el
gcloud compute instances list
comando con un filtro que incluya los nombres de las VMs de la lista de operaciones:gcloud compute instances list VM_NAME \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
Usa el comando
gcloud compute instances list
para obtener las propiedades de las VMs de todas las zonas y regiones, y filtra por una etiqueta que sea única para las instancias o por sus nombres:gcloud compute instances list \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
REST
En el
Operation
devuelto por la solicitud, obtén el valor de la propiedadoperationGroupId
.Usa la propiedad
operationGroupId
para obtener la lista de operaciones de VM asociadas a la solicitud regional o por zonas:Si has enviado una solicitud regional, para buscar en todas las operaciones y zonas del proyecto, usa el método
globalOperations.aggregatedList
e incluye la propiedadoperationGroupId
como filtro:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
Si has enviado una solicitud zonal, para enumerar las operaciones de esa zona, usa el método
zoneOperations.get
e incluye la propiedadoperationGroupId
en el cuerpo de la solicitud:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert { ... "operationGroupId":"OPERATION_GROUP_ID" ... }
Para obtener el resto de las propiedades de la máquina virtual, haga lo siguiente:
En la lista de operaciones,
targetLink
representa la ruta de la máquina virtual. Usa el métodoinstances.get
con esta ruta como nombre de la VM para obtener todas las propiedades de la VM:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
Usa el
instances.get
método con un filtro que incluya los nombres de las VMs de la lista de operaciones:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
Usa el
instances.aggregatedList
método para obtener las propiedades de las VMs de todas las zonas y regiones, y filtrar por una etiqueta que sea única para las instancias o por sus nombres:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
Ejemplos de pseudocódigo
En los siguientes ejemplos de pseudocódigo se muestra cómo personalizar las solicitudes para crear VMs en bloque.
Crear VMs en bloque en una región a partir de un conjunto de regiones
En el siguiente pseudocódigo se describe cómo crear 1000 VMs en una región a partir de un conjunto de regiones. Cuando se intenta crear VMs en bloque en una región a partir de un conjunto de regiones, la solicitud primero comprueba la capacidad. Si no hay suficiente capacidad, la solicitud falla inmediatamente y se vuelve a intentar con la siguiente región del conjunto.
Especifica el número de VMs que se crearán en una zona.
nTarget = 1000
Designa las regiones en las que se intentará crear las VMs.
acceptableRegions = ["us-central1", "us-east1", "us-west1"]
Itera por las regiones e intenta crear las VMs en cada región hasta que se complete la operación.
for region in acceptableRegions: call bulk API: region=region, location-policy=location-policy, count=nTarget if request succeeds and the operation succeeds: break
Crear VMs en bloque en una zona con un tipo de máquina
En el siguiente pseudocódigo se describe cómo crear varias VMs en una zona con un tipo de máquina específico. Cuando se intenta crear máquinas virtuales en bloque con el mismo tipo de máquina, la solicitud primero comprueba la disponibilidad de esos tipos de máquina. Si no hay suficiente cantidad del tipo de máquina disponible, la solicitud falla inmediatamente y se vuelve a intentar con el siguiente tipo de máquina.
Especifica el número de VMs que quieres crear y la región en la que quieres crearlas.
nTarget = 1000 region = "us-central1"
Especifica las familias de máquinas en las que se intentará crear las VMs.
acceptableMachineFamilies = ["n2","c2","e2","n1"]
Itera por el conjunto de tipos de máquina e intenta crear las VMs en el tipo de máquina hasta que se complete correctamente.
for family in acceptableMachineFamilies: call bulk APIs: region=region, count=nTarget, machineFamily=family if request succeeds and the operation succeeds: break
Crear más de 5000 VMs en una zona
Cuando creas VMs en bloque, solo puedes crear 5000 VMs con cada solicitud. El siguiente pseudocódigo describe cómo crear más de 5000 VMs en una zona enviando varias solicitudes.
Especifica el número de VMs que quieres crear, un contador para hacer un seguimiento del número total de VMs creadas, la región en la que quieres crear las VMs y una variable para almacenar la zona en la que Compute Engine crea las VMs.
nTarget = 10000 nCreated = 0 region = "us-central1" targetZone = ""
Envía una solicitud inicial para crear 5000 VMs, guarda la zona devuelta por la solicitud y actualiza el contador del número de VMs creadas.
call bulk API: region=region, count=5000 targetZone = zone chosen by bulk API nCreated += # of VMs created
Sigue enviando solicitudes para crear hasta 5000 VMs a la vez en la zona hasta que Compute Engine cree el número especificado de VMs.
while(nTarget - nCreated > 0): call bulk API: zone=targetZone, count=5000 nCreated += # of VMs created
Crear VMs en bloque y ver su estado
En el siguiente procedimiento se muestra cómo crear un grupo de VMs con nombres predefinidos y, a continuación, ver su estado:
Especifica el número de VMs que quieres crear, la zona en la que quieres crearlas y una estructura de datos en la que almacenar los nombres.
nTarget = 1000 targetZone = "us-central-1a" names = []
Genera los nombres con patrón de las VMs y añádelos a la estructura de datos.
for n in range(0, 1000): names.push("instance-%d".format(n))
Crea las VMs y usa
perInstanceProperties
para especificar los nombres.call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
Obtén los detalles de las VMs mediante el
instances.list
método con un filtro para los nombres de las VMs de las que quieras obtener los detalles.instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
Siguientes pasos
Después de crear VMs en bloque, haga una o ambas de las siguientes acciones para simplificar la gestión de esas VMs:
Añade las VMs a un grupo de instancias sin gestionar. Añadir VMs a un grupo de instancias no gestionado te permite usar Cloud Monitoring. Los grupos de instancias no gestionados no proporcionan balanceo de carga ni gestión del ciclo de vida de las VMs.
Usa etiquetas. Las etiquetas te permiten organizar los recursos mediante pares clave-valor.
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-12 (UTC).
-