Crea VMs de forma masiva


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.
  • Configura la autenticación si aún no lo hiciste. 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 un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. 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:

  • 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

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_SHAPE ]

Reemplaza lo siguiente:

  • 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 usas vm-# para el patrón de nombre, se generan VM con nombres vm-1, vm-2 y así sucesivamente hasta el número de VM especificadas por --count, que debe ser menor o igual que el número de VM 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 especificar COUNT, 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 especifica COUNT, la solicitud falla y no se crean VMs.
    1 Compute Engine crea tantas VM como sea posible hasta COUNT.
    Mayor que 1 y menos que COUNT Compute Engine crea al menos MIN_COUNT VMs, hasta un máximo de COUNT VMs. Si no se pueden crear MIN_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, y deny. A continuación, se muestra un ejemplo de un valor para esta marca:

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_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.

REST

Para crear VMs de forma masiva en una región, usa el siguiente método instances.bulkInsert:

POST https://www.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_SHAPE"
  ...
}

Reemplaza lo siguiente:

  • 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 usas vm-# para el patrón de nombre, se generan VM con nombres vm-1, vm-2 y así sucesivamente hasta el número de VM especificadas por --count, que debe ser menor o igual que el número de VM 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 especificas COUNT, 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 usas perInstanceProperties, no es necesario especificar COUNT, 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 especifica COUNT, la solicitud falla y no se crean VMs.
    1 Compute Engine crea tantas VM como sea posible hasta COUNT.
    Mayor que 1 y menos que COUNT Compute Engine crea al menos MIN_COUNT VMs, hasta un máximo de COUNT VMs. Si no se pueden crear MIN_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, y DENY. 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_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.

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:

  • 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 usas vm-# para el patrón de nombre, se generan VM con nombres vm-1, vm-2 y así sucesivamente hasta el número de VM especificadas por --count, que debe ser menor o igual que el número de VM 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 especificar COUNT, 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 especifica COUNT, la solicitud falla y no se crean VMs.
    1 Compute Engine crea tantas VM como sea posible hasta COUNT.
    Mayor que 1 y menos que COUNT Compute Engine crea al menos MIN_COUNT VMs, hasta un máximo de COUNT VMs. Si no se pueden crear MIN_COUNT VMs, la solicitud falla y estas no se crean.

REST

Para crear VMs de forma masiva en una zona, usa el siguiente método instances.bulkInsert.

POST https://www.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:

  • 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 usas vm-# para el patrón de nombre, se generan VM con nombres vm-1, vm-2 y así sucesivamente hasta el número de VM especificadas por --count, que debe ser menor o igual que el número de VM 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 especificas COUNT, 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 usas perInstanceProperties, no es necesario especificar COUNT, 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 especifica COUNT, la solicitud falla y no se crean VMs.
    1 Compute Engine crea tantas VM como sea posible hasta COUNT.
    Mayor que 1 y menos que COUNT Compute Engine crea al menos MIN_COUNT VMs, hasta un máximo de COUNT VMs. Si no se pueden crear MIN_COUNT VMs, la solicitud falla y estas no se crean.

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:

  • VM_NAME.c.PROJECT_ID.internal cuando habilites el DNS global
  • VM_NAME.ZONE.c.PROJECT_ID.internal cuando habilites 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 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_SHAPE ]

Reemplaza lo siguiente:

  • 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 usas vm-# para el patrón de nombre, se generan VM con nombres vm-1, vm-2 y así sucesivamente hasta el número de VM especificadas por --count, que debe ser menor o igual que el número de VM 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 especificar COUNT, 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 especifica COUNT, la solicitud falla y no se crean VMs.
    1 Compute Engine crea tantas VM como sea posible hasta COUNT.
    Mayor que 1 y menos que COUNT Compute Engine crea al menos MIN_COUNT VMs, hasta un máximo de COUNT VMs. Si no se pueden crear MIN_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, y DENY. 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_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.

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://www.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_SHAPE"
  ...
}

Reemplaza lo siguiente:

  • 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 usas vm-# para el patrón de nombre, se generan VM con nombres vm-1, vm-2 y así sucesivamente hasta el número de VM especificadas por --count, que debe ser menor o igual que el número de VM 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 especificas COUNT, 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 y vm-2 con nombres de host personalizados my-host1234.example.com y test.example.com respectivamente, especifica la propiedad hostname en perInstanceProperties 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 usas perInstanceProperties, no es necesario especificar COUNT, 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 especifica COUNT, la solicitud falla y no se crean VMs.
    1 Compute Engine crea tantas VM como sea posible hasta COUNT.
    Mayor que 1 y menos que COUNT Compute Engine crea al menos MIN_COUNT VMs, hasta un máximo de COUNT VMs. Si no se pueden crear MIN_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, y DENY. 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_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.

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 recurso operation:

GET 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 compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto en el que creas las VMs
  • REGION: 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 masiva

El objeto instancesBulkInsertOperationMetadata de la respuesta contiene los siguientes detalles de la operación:

  • status: 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 especificada
  • createdVmCount: La cantidad de VMs que ya se crearon en la zona especificada
  • failedToCreateVmCount: 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.

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://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://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 por minCount 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 del objeto 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

  1. Desde el Operation que muestra la solicitud, obtén el valor de la propiedad operationGroupId.

  2. Usa la propiedad operationGroupId como filtro con el comando gcloud 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)
    
  3. 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 comando gcloud 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)
      

REST

  1. Desde el Operation que muestra la solicitud, obtén el valor de la propiedad operationGroupId.

  2. 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 propiedad operationGroupId 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 propiedad operationGroupId en el cuerpo de la solicitud:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert
      
      {
      ...
      "operationGroupId":"OPERATION_GROUP_ID"
      ...
      }
      
  3. 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étodo instances.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)
      

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.

  1. Especifica la cantidad de VM que se crearán dentro de una zona.

    nTarget = 1000
    
  2. Designa las regiones en las que se intentará crear las VM.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. 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
    

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.

  1. Especifica la cantidad de VM que se crearán y la región en la que lo harán.

    nTarget = 1000
    region = "us-central1"
    
  2. Especifica las familias de máquinas en las que se intentará crear las VM.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. 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
    

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.

  1. 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 = ""
    
  2. 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
    
  3. 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
    

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:

  1. 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 = []
    
  2. 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))
    
  3. Crea las VM y usa perInstanceProperties para especificar los nombres.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. 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") ...)
    

¿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: