Cuando quieras crear una gran cantidad de instancias de máquina virtual (VM) que sean idénticas y también independientes entre sí, crea VMs de forma masiva mediante Google Cloud CLI o la API de Compute Engine. Puedes crear estas VMs en todas las zonas de una región o distribuirlas en ciertas zonas.
Para obtener más detalles y las limitaciones asociadas, consulta Acerca de la creación masiva de VMs.
Antes de comenzar
- En el caso de las VMs y cualquier recurso relacionado que quieras crear, asegúrate de tener suficiente cuota y los permisos necesarios.
-
Si aún no lo hiciste, configura la autenticación.
La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud.
Para ejecutar código o muestras 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
compute.instances.create
en el proyecto -
Si deseas usar una imagen personalizada para crear la VM, sigue estos pasos:
compute.images.useReadOnly
en la imagen -
Para usar una instantánea a fin de crear la VM, haz lo siguiente:
compute.snapshots.useReadOnly
en la instantánea -
Si quieres usar una plantilla de instancias para crear la VM, sigue estos pasos:
compute.instanceTemplates.useReadOnly
en la plantilla de instancias -
Para asignar una red heredada a la VM, ejecuta
compute.networks.use
en el proyecto. -
Si deseas especificar una dirección IP estática para la VM:
compute.addresses.use
en el proyecto -
Para asignar una dirección IP externa a la VM cuando se usa una red heredada, ejecuta
compute.networks.useExternalIp
en el proyecto -
A fin de especificar una subred para tu VM:
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,
compute.subnetworks.useExternalIp
en el proyecto o en la subred elegida. -
Para configurar los metadatos de la instancia de VM para la VM,
compute.instances.setMetadata
en el proyecto. -
Para configurar etiquetas en la VM, haz lo siguiente:
compute.instances.setTags
en la VM -
Para configurar etiquetas en la VM, haz lo siguiente:
compute.instances.setLabels
en la VM -
A fin de configurar una cuenta de servicio para que la VM use:
compute.instances.setServiceAccount
en la VM -
Crear un disco nuevo para la VM:
compute.disks.create
en el proyecto -
Para conectar un disco existente en modo de solo lectura o de lectura y escritura, usa
compute.disks.use
en el disco. -
Para conectar un disco existente en modo de solo lectura, haz lo siguiente:
compute.disks.useReadOnly
en el disco NAME_PATTERN: Es el patrón del nombre de las VM. Usa una secuencia de caracteres hash (
#
) para que se reemplace Compute Engine por una secuencia de números. Por ejemplo, si usasvm-#
para el patrón de nombre, se generan VMs con nombres comovm-1
yvm-2
, hasta la cantidad de VMs especificadas por--count
, que debe ser menor o igual que el 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 nombre mediante la verificación de los nombres de las VM existentes creadas a partir de solicitudes anteriores.
PREDEFINED_NAMES: una lista de nombres predefinidos para las VM que se crearán. Si usas esta marca y especificas
COUNT
,COUNT
debe ser igual a la cantidad de nombres proporcionados.REGION: La región en la que se crearán las VM
COUNT: la cantidad de VM que se crearán. Debe ser menor o igual que la cantidad de VM que permite
NAME_PATTERN
. O, si usas--predefined-names
, no es necesario especificarCOUNT
, pero si lo haces, debe ser igual a la cantidad de nombres proporcionados.MIN_COUNT: Es la cantidad mínima de VMs que se crearán. En la siguiente tabla, se describe el comportamiento de la solicitud en función de cómo configuras esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear la cantidad de VMs que especificaCOUNT
, la solicitud falla y no se crean VMs.1
Compute Engine crea tantas VM como sea posible hasta COUNT
.Mayor que 1
y menos queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs, hasta un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y estas no se crean.LOCATION_POLICY: Son las zonas que se incluirán o excluirán dentro de una región. Usa una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos para la política son
allow
, que es la opción predeterminada, ydeny
. A continuación, se muestra un ejemplo de un valor para 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 para esta marca:Valor Descripción ANY_SINGLE_ZONE
Aplica la ubicación de la VM en una sola zona y prioriza el uso de las reservas sin usar. Emplea esta estrategia para evitar la salida de red entre zonas o reducir la latencia de red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de manera uniforme entre todas las zonas de la región. ANY
Permite la distribución de VMs en varias zonas de una región. Elige zonas que tengan recursos disponibles y maximicen las reservas zonales no utilizadas. PROJECT_ID: El ID del proyecto.
REGION: La región en la que se crearán las VM
NAME_PATTERN: Es el patrón del nombre de las VM. Especifica esto o
perInstanceProperties
. Usa una secuencia de caracteres hash (#
) para que se reemplace Compute Engine por una secuencia de números. Por ejemplo, si usasvm-#
para el patrón de nombre, se generan VMs con nombres comovm-1
yvm-2
, hasta la cantidad de VMs especificadas por--count
, que debe ser menor o igual que la cantidad de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombre mediante la verificación de los nombres de las VM existentes creadas a partir de solicitudes anteriores.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: una lista de nombres predefinidos para las VM que se crearán. Especifica esto o
namePattern
. Si usas esta marca y especificasCOUNT
,COUNT
debe ser igual a la cantidad de nombres proporcionados.COUNT: la cantidad de VM que se crearán. Debe ser menor o igual que la cantidad de VM que permite
NAME_PATTERN
. O, si usasperInstanceProperties
, no es necesario especificarCOUNT
, pero si lo haces, debe ser igual a la cantidad de nombres proporcionados.MIN_COUNT: Es la cantidad mínima de VMs que se crearán. En la siguiente tabla, se describe el comportamiento de la solicitud en función de cómo configuras esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear la cantidad de VMs que especificaCOUNT
, la solicitud falla y no se crean VMs.1
Compute Engine crea tantas VM como sea posible hasta COUNT
.Mayor que 1
y menos queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs, hasta un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y estas no se crean.LOCATION_POLICY: Son las zonas que se incluirán o excluirán dentro de una región. Usa una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos para la política son
ALLOW
, que es la opción predeterminada, yDENY
. A continuación, se muestra un ejemplo de un valor para 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 para este campo:Valor Descripción ANY_SINGLE_ZONE
Aplica la ubicación de la VM en una sola zona y prioriza el uso de las reservas sin usar. Emplea esta estrategia para evitar la salida de red entre zonas o reducir la latencia de red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de manera uniforme entre todas las zonas de la región. ANY
Permite la distribución de VMs en varias zonas de una región. Elige zonas que tengan recursos disponibles y maximicen las reservas zonales no utilizadas. NAME_PATTERN: Es el patrón del nombre de las VM. Usa una secuencia de caracteres hash (
#
) para que se reemplace Compute Engine por una secuencia de números. Por ejemplo, si usasvm-#
para el patrón de nombre, se generan VMs con nombres comovm-1
yvm-2
, hasta la cantidad de VMs especificadas por--count
, que debe ser menor o igual que el 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 nombre mediante la verificación de los nombres de las VM existentes creadas a partir de solicitudes anteriores.
PREDEFINED_NAMES: una lista de nombres predefinidos para las VM que se crearán. Si usas esta marca y especificas
COUNT
,COUNT
debe ser igual a la cantidad de nombres proporcionados.ZONE: Es la zona en la que se creará la VM.
COUNT: la cantidad de VM que se crearán. Debe ser menor o igual que la cantidad de VM que permite
NAME_PATTERN
. O, si usas--predefined-names
, no es necesario especificarCOUNT
, pero si lo haces, debe ser igual a la cantidad de nombres proporcionados.MIN_COUNT: Es la cantidad mínima de VMs que se crearán. En la siguiente tabla, se describe el comportamiento de la solicitud en función de cómo configuras esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear la cantidad de VMs que especificaCOUNT
, la solicitud falla y no se crean VMs.1
Compute Engine crea tantas VM como sea posible hasta COUNT
.Mayor que 1
y menos queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs, hasta un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y estas no se crean.PROJECT_ID: El ID del proyecto.
ZONE: Es la zona en la que se creará la VM.
NAME_PATTERN: Es el patrón del nombre de las VM. Especifica esto o
perInstanceProperties
. Usa una secuencia de caracteres hash (#
) para que se reemplace Compute Engine por una secuencia de números. Por ejemplo, si usasvm-#
para el patrón de nombre, se generan VMs con nombres comovm-1
yvm-2
, hasta la cantidad de VMs especificadas por--count
, que debe ser menor o igual que la cantidad de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombre mediante la verificación de los nombres de las VM existentes creadas a partir de solicitudes anteriores.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: una lista de nombres predefinidos para las VM que se crearán. Especifica esto o
namePattern
. Si usas esta marca y especificasCOUNT
,COUNT
debe ser igual a la cantidad de nombres proporcionados.COUNT: la cantidad de VM que se crearán. Debe ser menor o igual que la cantidad de VM que permite
NAME_PATTERN
. O, si usasperInstanceProperties
, no es necesario especificarCOUNT
, pero si lo haces, debe ser igual a la cantidad de nombres proporcionados.MIN_COUNT: Es la cantidad mínima de VMs que se crearán. En la siguiente tabla, se describe el comportamiento de la solicitud en función de cómo configuras esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear la cantidad de VMs que especificaCOUNT
, la solicitud falla y no se crean VMs.1
Compute Engine crea tantas VM como sea posible hasta COUNT
.Mayor que 1
y menos queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs, hasta un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y estas no se crean.VM_NAME.c.PROJECT_ID.internal
cuando habilites el DNS globalVM_NAME.ZONE.c.PROJECT_ID.internal
cuando habilites el DNS zonalNAME_PATTERN: Es el patrón del nombre de las VM. Usa una secuencia de caracteres hash (
#
) para que se reemplace Compute Engine por una secuencia de números. Por ejemplo, si usasvm-#
para el patrón de nombre, se generan VMs con nombres comovm-1
yvm-2
, hasta la cantidad de VMs especificadas por--count
, que debe ser menor o igual que el 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 nombre mediante la verificación de los nombres de las VM existentes creadas a partir de solicitudes anteriores.
PREDEFINED_NAMES: una lista de nombres predefinidos para las VM que se crearán. Si usas esta marca y especificas
COUNT
,COUNT
debe ser igual a la cantidad de nombres proporcionados.[VM_NAME=HOSTNAME, ...]: una lista de pares clave-valor de nombres predefinidos para las VMs y nombres de host de dominio completamente calificados que deseas asignar para las VMs. Los nombres de host personalizados deben cumplir con los requisitos de RFC 1035 para nombres de host válidos.
REGION: Es la zona en la que se creará la VM.
COUNT: la cantidad de VM que se crearán. Debe ser menor o igual que la cantidad de VM que permite
NAME_PATTERN
. O, si usas--predefined-names
, no es necesario especificarCOUNT
, pero si lo haces, debe ser igual a la cantidad de nombres proporcionados.MIN_COUNT: Es la cantidad mínima de VMs que se crearán. En la siguiente tabla, se describe el comportamiento de la solicitud en función de cómo configuras esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear la cantidad de VMs que especificaCOUNT
, la solicitud falla y no se crean VMs.1
Compute Engine crea tantas VM como sea posible hasta COUNT
.Mayor que 1
y menos queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs, hasta un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y estas no se crean.LOCATION_POLICY: Son las zonas que se incluirán o excluirán dentro de una región. Usa una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos para la política son
ALLOW
, que es la opción predeterminada, yDENY
. A continuación, se muestra un ejemplo de un valor para 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 para este campo:Valor Descripción ANY_SINGLE_ZONE
Aplica la ubicación de la VM en una sola zona y prioriza el uso de las reservas sin usar. Emplea esta estrategia para evitar la salida de red entre zonas o reducir la latencia de red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de manera uniforme entre todas las zonas de la región. ANY
Permite la distribución de VMs en varias zonas de una región. Elige zonas que tengan recursos disponibles y maximicen las reservas zonales no utilizadas. PROJECT_ID: El ID del proyecto.
REGION: La región en la que se crearán las VM
NAME_PATTERN: Es el patrón del nombre de las VM. Especifica esto o
perInstanceProperties
. Usa una secuencia de caracteres hash (#
) para que se reemplace Compute Engine por una secuencia de números. Por ejemplo, si usasvm-#
para el patrón de nombre, se generan VMs con nombres comovm-1
yvm-2
, hasta la cantidad de VMs especificadas por--count
, que debe ser menor o igual que la cantidad de VMs que permite el patrón de nombre.Cuando se usa un patrón de nombre, Compute Engine intenta evitar conflictos de nombre mediante la verificación de los nombres de las VM existentes creadas a partir de solicitudes anteriores.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: una lista de nombres predefinidos para las VM que se crearán. Especifica esto o
namePattern
. Si usas esta marca y especificasCOUNT
,COUNT
debe ser igual a la cantidad de nombres proporcionados.HOSTNAME_1, HOSTNAME_2, ...: nombres de host de dominio completamente calificados que deseas asignar para las VMs. Los nombres de host personalizados deben cumplir con los requisitos de RFC 1035 para nombres de host válidos.
Por ejemplo, para crear dos VMs
vm-1
yvm-2
con 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: la cantidad de VM que se crearán. Debe ser menor o igual que la cantidad de VM que permite
NAME_PATTERN
. O, si usasperInstanceProperties
, no es necesario especificarCOUNT
, pero si lo haces, debe ser igual a la cantidad de nombres proporcionados.MIN_COUNT: Es la cantidad mínima de VMs que se crearán. En la siguiente tabla, se describe el comportamiento de la solicitud en función de cómo configuras esta marca:
Valor Descripción Sin establecer El valor predeterminado es COUNT
. Si Compute Engine no puede crear la cantidad de VMs que especificaCOUNT
, la solicitud falla y no se crean VMs.1
Compute Engine crea tantas VM como sea posible hasta COUNT
.Mayor que 1
y menos queCOUNT
Compute Engine crea al menos MIN_COUNT
VMs, hasta un máximo deCOUNT
VMs. Si no se pueden crearMIN_COUNT
VMs, la solicitud falla y estas no se crean.LOCATION_POLICY: Son las zonas que se incluirán o excluirán dentro de una región. Usa una lista de pares clave-valor, con la zona como clave y la política como valor. Los valores válidos para la política son
ALLOW
, que es la opción predeterminada, yDENY
. A continuación, se muestra un ejemplo de un valor para 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 para este campo:Valor Descripción ANY_SINGLE_ZONE
Aplica la ubicación de la VM en una sola zona y prioriza el uso de las reservas sin usar. Emplea esta estrategia para evitar la salida de red entre zonas o reducir la latencia de red. Este es el valor predeterminado. BALANCED
Intenta distribuir las VMs de manera uniforme entre todas las zonas de la región. ANY
Permite la distribución de VMs en varias zonas de una región. Elige zonas que tengan recursos disponibles y maximicen las reservas zonales no utilizadas. PROJECT_ID
: El ID del proyecto en el que creas las VMsREGION
: Es la región en la que crearás las VMs.ZONE
: Es la zona en la que crearás las VMs.OPERATION_ID
: El ID de la operación de inserción masivastatus
: El estado corresponde a uno de los siguientes:CREATING
: La creación de la VM está en curso.ROLLING_BACK
: La solicitud falló y se revertirá.DONE
: La creación o la reversión de la VM se completó correctamente.
targetVmCount
: La cantidad de VMs que se crearán en la zona especificadacreatedVmCount
: La cantidad de VMs que ya se crearon en la zona especificadafailedToCreateVmCount
: Es la cantidad de VMs que no se pudieron crear en la zona especificada.deletedVmCount
: Es la cantidad de VMs que se borraron como parte de la reversión de una operación fallida.Desde el
Operation
que muestra la solicitud, obtén el valor de la propiedadoperationGroupId
.Usa la propiedad
operationGroupId
como filtro con el comandogcloud compute operations list
para realizar búsquedas en todas las operaciones y zonas del proyecto de las VMs asociadas con la solicitud regional o zonal:gcloud compute operations list \ --filter=(operationGroupId=OPERATION_GROUP_ID)
Para obtener el resto de las propiedades de la VM, haz lo siguiente:
En la lista de operaciones, el
targetLink
representa la ruta de acceso de la VM. Usa el comandogcloud compute instances describe
con esta ruta como el nombre de la VM para obtener sus propiedades completas:gcloud compute instances describe VM_NAME
Usa el comando
gcloud compute instances list
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 VM de todas las zonas y regiones, y filtra por una etiqueta que sea única de las instancias o por sus nombres:gcloud compute instances list \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
Desde el
Operation
que muestra la solicitud, obtén el valor de la propiedadoperationGroupId
.Usa la propiedad
operationGroupId
para obtener la lista de operaciones de VM asociadas con la solicitud regional o zonal:Si enviaste una solicitud regional, para buscar en todas las operaciones y zonas del proyecto, usa el método
globalOperations.aggregatedList
y, luego, incluye la propiedadoperationGroupId
como filtro:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
Si enviaste una solicitud zonal, para enumerar las operaciones en esa zona, usa el método
zoneOperations.get
y asegúrate de incluir 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 VM, haz lo siguiente:
En la lista de operaciones, el
targetLink
representa la ruta de acceso de la VM. Usa el métodoinstances.get
con esta ruta de acceso como el 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 método
instances.get
con un filtro que incluya los nombres de las VM 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 método
instances.aggregatedList
para obtener las propiedades de VM de todas las zonas y regiones, y filtra por una etiqueta que sea única de 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)
Especifica la cantidad de VM que se crearán dentro de una zona.
nTarget = 1000
Designa las regiones en las que se intentará crear las VM.
acceptableRegions = ["us-central1", "us-east1", "us-west1"]
Itera en las regiones y trata de crear las VM en cada región hasta que logres hacerlo.
for region in acceptableRegions: call bulk API: region=region, location-policy=location-policy, count=nTarget if request succeeds and the operation succeeds: break
Especifica la cantidad de VM que se crearán y la región en la que lo harán.
nTarget = 1000 region = "us-central1"
Especifica las familias de máquinas en las que se intentará crear las VM.
acceptableMachineFamilies = ["n2","c2","e2","n1"]
Itera el conjunto de tipos de máquinas y trata de crear las VM 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
Especifica la cantidad de VM que se crearán, un contador para realizar un seguimiento de la cantidad total de VM creadas, la región en la que se crearán las VM y una variable para almacenar la zona en la que Compute Engine crea las VM.
nTarget = 10000 nCreated = 0 region = "us-central1" targetZone = ""
Emite una solicitud inicial para crear 5,000 VMs, guarda la zona que muestra la solicitud y actualiza el recuento de la cantidad de VMs creadas.
call bulk API: region=region, count=5000 targetZone = zone chosen by bulk API nCreated += # of VMs created
Continúa enviando solicitudes para crear hasta 5,000 VMs a la vez en la zona hasta que Compute Engine cree la cantidad especificada de VMs.
while(nTarget - nCreated > 0): call bulk API: zone=targetZone, count=5000 nCreated += # of VMs created
Especifica la cantidad de VM que se crearán, la zona en la que se crearán y una estructura de datos en la que se almacenarán los nombres.
nTarget = 1000 targetZone = "us-central-1a" names = []
Genera los nombres con patrones para las VM y agrégalos a la estructura de datos.
for n in range(0, 1000): names.push("instance-%d".format(n))
Crea las VM y usa
perInstanceProperties
para especificar los nombres.call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
Obtén los detalles de las VM mediante el método
instances.list
con un filtro para los nombres de las VM sobre las que se mostrarán detalles.instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
Agrega las VMs a un grupo de instancias no administrado. Agregar VMs a un grupo de instancias no administrado te permite usar Cloud Monitoring. Los grupos de instancias no administrados no proporcionan balanceo de cargas ni administración del ciclo de vida de la VM.
Usa etiquetas. Las etiquetas te permiten organizar los recursos con pares clave-valor.
REST
Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.
Roles obligatorios
Para obtener los permisos que necesitas para crear VMs de forma masiva, pídele al administrador que te otorgue el rol de IAM Administrador de instancias de Compute (v1) (
roles/compute.instanceAdmin.v1
) IAM en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.Este rol predefinido contiene los permisos necesarios para crear VMs de forma masiva. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para crear VMs de forma masiva:
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Crea VMs de forma masiva en una región
Para crear VMs de forma masiva en una región, usa la CLI de gcloud o la API de Compute Engine.
Si especificas un tipo de máquina o compatibilidad con hardware adicional, como una GPU o una SSD local, Compute Engine coloca las VM en una zona dentro de la región que admite el tipo de máquina y el hardware adicional.
gcloud
Para crear VMs de forma masiva en una región, usa el siguiente comando
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 ]
Reemplaza lo siguiente:
REST
Para crear VMs de forma masiva en una región, usa el siguiente método
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" ... }
Reemplaza lo siguiente:
Crea VMs de forma masiva en una zona
Para crear VMs de forma masiva 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 comando
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 ]
Reemplaza lo siguiente:
REST
Para crear VMs de forma masiva en una zona, usa el siguiente método
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, ... }
Reemplaza lo siguiente:
Crea VMs con nombres de host personalizados de forma masiva
Puedes crear VMs con nombres de host personalizados de forma masiva en una región o una zona mediante la gcloud CLI o la API de Compute Engine.
Debes configurar manualmente el registro DNS para tu nombre de host personalizado. Para obtener más información, consulta Limitaciones.
Si no especificas un nombre de host, Compute Engine establece el nombre de host para las VMs como una de las siguientes opciones:
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 comando
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 ]
Reemplaza lo siguiente:
REST
Para crear VMs con nombres de host personalizados de forma masiva en una región específica, usa el siguiente método
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" ... }
Reemplaza lo siguiente:
Verifica el estado de una solicitud para crear VMs de forma masiva
Cuando creas una solicitud de mutación, Compute Engine muestra un objeto
operation
que puedes sondear para obtener el estado de la operación. Para obtener más información, consulta Controla las 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 masiva regional, envía la siguiente solicitud:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID
Reemplaza lo siguiente:
El objeto
instancesBulkInsertOperationMetadata
de la respuesta contiene los siguientes detalles de la operación: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 cree de forma correcta al menos la cantidad mínima de VMs especificadas y no se produzca ninguna otra creación de la VM o reversión de la solicitud.Cuando la operación de inserción masiva esté en curso, deberías 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 creó una instancia correctamente y la operación se completó un 2%.
La operación muestra el estado
DONE
cuando Compute Engine crea de forma correcta al menos la cantidad mínima de VMs especificadas porminCount
o cuando Compute Engine completa la reversión de la solicitud. Después de crear correctamente la cantidad solicitada de VMs, 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 de la marca
instancesBulkInsertOperationMetadata
.Verifica el estado de una sola VM
Si quieres verificar el estado de una sola VM creada a partir de una solicitud para crear VMs de forma masiva, usa la CLI de gcloud o la API de Compute Engine.
gcloud
REST
Ejemplos de pseudocódigo
En los siguientes ejemplos de pseudocódigo, se muestra cómo personalizar las solicitudes para crear VMs de forma masiva.
Crea VMs de forma masiva en una región a partir de un conjunto de regiones
En el siguiente seudocódigo, se describe cómo crear 1,000 VMs en una región de un conjunto de regiones. Cuando se intenta crear VMs de forma masiva en una región de un conjunto de regiones, la solicitud primero comprueba la capacidad. Si no hay capacidad suficiente, la solicitud falla de inmediato y vuelve a intentarlo con la siguiente región del conjunto.
Crea VMs de forma masiva en una zona de un tipo de máquina
En el siguiente seudocódigo, se describe cómo crear varias VMs en una zona de un tipo de máquina especificado. Cuando se intenta crear VMs de forma masiva en el mismo tipo de máquina, la solicitud primero comprueba la disponibilidad de esos tipos de máquina. Si no hay disponibilidad suficiente, la solicitud falla de inmediato y vuelve a intentarlo con el siguiente tipo de máquina.
Crea más de 5,000 VMs en una zona
Cuando creas VMs de forma masiva, solo puedes crear 5,000 VMs con cada solicitud. En el siguiente pseudocódigo, se describe cómo crear más de 5,000 VMs en una zona mediante el envío de varias solicitudes.
Crea VMs de forma masiva y consulta su estado
En el siguiente procedimiento, se muestra cómo crear un grupo de VMs que tengan nombres predefinidos y, luego, ver su estado:
¿Qué sigue?
Después de crear VMs de forma masiva, realiza una de las siguientes acciones o ambas para simplificar la administración de esas VMs:
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2024-12-22 (UTC)
-