Cree máquinas virtuales de forma masiva


Cuando desee crear una gran cantidad de instancias de máquinas virtuales (VM) que sean idénticas e independientes entre sí, cree VM de forma masiva utilizando la CLI de Google Cloud o la API de Compute Engine. Puede crear estas máquinas virtuales en todas las zonas de una región o distribuirlas en determinadas zonas.

Para obtener más detalles y limitaciones asociadas, consulte Acerca de la creación masiva de máquinas virtuales . Si desea crear instancias con GPU conectadas, consulte Crear máquinas virtuales con GPU de forma masiva .

Antes de comenzar

  • Para las máquinas virtuales y cualquier recurso relacionado que planee crear, asegúrese de tener suficiente cuota y los permisos necesarios .
  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. 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

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Roles requeridos

Para obtener los permisos que necesita para crear máquinas virtuales de forma masiva, solicite a su administrador que le otorgue la función de IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulte Administrar el acceso a proyectos, carpetas y organizaciones .

Esta función predefinida contiene los permisos necesarios para crear máquinas virtuales de forma masiva. Para ver los permisos exactos que se requieren, expanda la sección Permisos requeridos :

Permisos requeridos

Se requieren los siguientes permisos para crear máquinas virtuales de forma masiva:

  • compute.instances.create en el proyecto.
  • Para usar una imagen personalizada para crear la VM: compute.images.useReadOnly en la imagen
  • Para usar una instantánea para crear la VM: compute.snapshots.useReadOnly en la instantánea
  • Para usar una plantilla de instancia para crear la VM: compute.instanceTemplates.useReadOnly en la plantilla de instancia
  • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
  • Para 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: compute.networks.useExternalIp en el proyecto
  • Para especificar una subred para su 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 VPC: compute.subnetworks.useExternalIp en el proyecto o en la subred elegida
  • Para configurar metadatos de instancia de VM para la VM: compute.instances.setMetadata en el proyecto
  • Para configurar etiquetas para la VM: compute.instances.setTags en la VM
  • Para configurar etiquetas para la VM: compute.instances.setLabels en la VM
  • Para configurar una cuenta de servicio para que la use la VM: compute.instances.setServiceAccount en la VM
  • Para crear un nuevo disco para la VM: compute.disks.create en el proyecto
  • Para conectar un disco existente en modo de solo lectura o lectura-escritura: compute.disks.use en el disco
  • Para conectar un disco existente en modo de solo lectura: compute.disks.useReadOnly en el disco

Es posible que también pueda obtener estos permisos con roles personalizados u otros roles predefinidos .

Crear máquinas virtuales de forma masiva en una región

Para crear máquinas virtuales 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 un 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.

nube de gcloud

Para crear máquinas virtuales 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 ]

Reemplace lo siguiente:

  • NAME_PATTERN : el patrón de nombre para las máquinas virtuales. Usa una secuencia de caracteres hash ( # ) para que Compute Engine la reemplace con una secuencia de números. Por ejemplo, el uso de vm-# para el patrón de nombre genera máquinas virtuales con nombres como vm-1 y vm-2 , hasta la cantidad de máquinas virtuales especificada por --count , que debe ser menor o igual a la cantidad de máquinas virtuales que permite el patrón de nombres.

    Cuando se utiliza un patrón de nombre, Compute Engine intenta evitar conflictos de nombres verificando los nombres de las VM existentes creadas a partir de solicitudes anteriores.

  • PREDEFINED_NAMES : una lista de nombres predefinidos para que las VM creen. Si utiliza esta marca y especifica COUNT , COUNT debe ser igual al número de nombres proporcionados.

  • REGION : la región en la que se crearán las máquinas virtuales.

  • COUNT : el número de máquinas virtuales que se van a crear. Debe ser menor o igual que la cantidad de máquinas virtuales permitidas por NAME_PATTERN . O, si usa --predefined-names , no tiene que especificar COUNT , pero si lo hace, debe ser igual a la cantidad de nombres proporcionados.

  • MIN_COUNT : la cantidad mínima de máquinas virtuales para crear. La siguiente tabla describe el comportamiento de la solicitud dependiendo de cómo establezca este indicador:

    Valor Descripción
    No establecido El valor predeterminado es COUNT . Si Compute Engine no puede crear la cantidad de VM especificada por COUNT , la solicitud falla y no se crea ninguna VM.
    1 Compute Engine crea tantas máquinas virtuales como sea posible, hasta COUNT .
    Mayor que 1 y menor que COUNT Compute Engine crea al menos MIN_COUNT VM hasta un máximo de COUNT VM. Si no se pueden crear MIN_COUNT máquinas virtuales, la solicitud falla y no se crea ninguna máquina virtual.
  • LOCATION_POLICY : las zonas a incluir o excluir dentro de una región. Utilice 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 el valor predeterminado, y deny . El siguiente es un valor de ejemplo para esta bandera:

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_DISTRIBUTION_SHAPE : la distribución de las máquinas virtuales en las zonas especificadas. Utilice el indicador --location-policy para especificar las zonas. La siguiente tabla muestra los valores válidos para esta bandera:

    Valor Descripción
    ANY_SINGLE_ZONE Impone la ubicación de VM en una sola zona y prioriza la utilización de reservas no utilizadas. Utilícelo para evitar la salida de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado.
    BALANCED Intenta distribuir las máquinas virtuales de manera uniforme en todas las zonas de la región.
    ANY Permite la distribución de máquinas virtuales en varias zonas de una región. Elige zonas que tienen recursos disponibles y que maximizan las reservas zonales no utilizadas.

DESCANSAR

Para crear máquinas virtuales de forma masiva en una región, utilice 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"
  ...
}

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto.

  • REGION : la región en la que se crearán las máquinas virtuales.

  • NAME_PATTERN : el patrón de nombre para las máquinas virtuales. Especifique esto o perInstanceProperties . Usa una secuencia de caracteres hash ( # ) para que Compute Engine los reemplace con una secuencia de números. Por ejemplo, el uso de vm-# para el patrón de nombre genera máquinas virtuales con nombres como vm-1 y vm-2 , hasta la cantidad de máquinas virtuales especificada por --count , que debe ser menor o igual a la cantidad de máquinas virtuales que permite el patrón de nombres.

    Cuando se utiliza un patrón de nombres, Compute Engine intenta evitar conflictos de nombres verificando los nombres de las VM existentes creadas a partir de solicitudes anteriores.

  • PREDEFINED_NAME_1 , PREDEFINED_NAME_2 , ...: una lista de nombres predefinidos para que las máquinas virtuales se creen. Especifique esto o namePattern . Si usa esta marca y especifica COUNT , COUNT debe ser igual al número de nombres proporcionados.

  • COUNT : el número de máquinas virtuales que se van a crear. Debe ser menor o igual que la cantidad de máquinas virtuales permitidas por NAME_PATTERN . O, si usa perInstanceProperties , no tiene que especificar COUNT , pero si lo hace, debe ser igual a la cantidad de nombres proporcionados.

  • MIN_COUNT : la cantidad mínima de máquinas virtuales para crear. La siguiente tabla describe el comportamiento de la solicitud dependiendo de cómo establezca este indicador:

    Valor Descripción
    No establecido El valor predeterminado es COUNT . Si Compute Engine no puede crear la cantidad de VM especificada por COUNT , la solicitud falla y no se crea ninguna VM.
    1 Compute Engine crea tantas máquinas virtuales como sea posible, hasta COUNT .
    Mayor que 1 y menor que COUNT Compute Engine crea al menos MIN_COUNT VM hasta un máximo de COUNT VM. Si no se pueden crear MIN_COUNT máquinas virtuales, la solicitud falla y no se crea ninguna máquina virtual.
  • LOCATION_POLICY : las zonas a incluir o excluir dentro de una región. Utilice 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 el valor predeterminado, y DENY . El siguiente es un valor de ejemplo para este campo:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE : la distribución de máquinas virtuales en las zonas especificadas. Utilice el campo locationPolicy para especificar las zonas. La siguiente tabla muestra los valores válidos para este campo:

    Valor Descripción
    ANY_SINGLE_ZONE Impone la ubicación de VM en una sola zona y prioriza la utilización de reservas no utilizadas. Utilícelo para evitar la salida de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado.
    BALANCED Intenta distribuir las máquinas virtuales de manera uniforme en todas las zonas de la región.
    ANY Permite la distribución de máquinas virtuales en varias zonas de una región. Elige zonas que tienen recursos disponibles y que maximizan las reservas zonales no utilizadas.

Crear máquinas virtuales de forma masiva en una zona

Para crear máquinas virtuales de forma masiva en una zona, usa la CLI de gcloud o la API de Compute Engine.

nube de gcloud

Para crear máquinas virtuales 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 ]

Reemplace lo siguiente:

  • NAME_PATTERN : el patrón de nombre para las máquinas virtuales. Usa una secuencia de caracteres hash ( # ) para que Compute Engine la reemplace con una secuencia de números. Por ejemplo, el uso de vm-# para el patrón de nombre genera máquinas virtuales con nombres como vm-1 y vm-2 , hasta la cantidad de máquinas virtuales especificada por --count , que debe ser menor o igual a la cantidad de máquinas virtuales que permite el patrón de nombres.

    Cuando se utiliza un patrón de nombre, Compute Engine intenta evitar conflictos de nombres verificando los nombres de las VM existentes creadas a partir de solicitudes anteriores.

  • PREDEFINED_NAMES : una lista de nombres predefinidos para que las VM creen. Si utiliza esta marca y especifica COUNT , COUNT debe ser igual al número de nombres proporcionados.

  • ZONE : la zona en la que se crearán las máquinas virtuales.

  • COUNT : el número de máquinas virtuales que se van a crear. Debe ser menor o igual que la cantidad de máquinas virtuales permitidas por NAME_PATTERN . O, si usa --predefined-names , no tiene que especificar COUNT , pero si lo hace, debe ser igual a la cantidad de nombres proporcionados.

  • MIN_COUNT : la cantidad mínima de máquinas virtuales para crear. La siguiente tabla describe el comportamiento de la solicitud dependiendo de cómo establezca este indicador:

    Valor Descripción
    No establecido El valor predeterminado es COUNT . Si Compute Engine no puede crear la cantidad de VM especificada por COUNT , la solicitud falla y no se crea ninguna VM.
    1 Compute Engine crea tantas máquinas virtuales como sea posible, hasta COUNT .
    Mayor que 1 y menor que COUNT Compute Engine crea al menos MIN_COUNT VM hasta un máximo de COUNT VM. Si no se pueden crear MIN_COUNT máquinas virtuales, la solicitud falla y no se crea ninguna máquina virtual.

DESCANSAR

Para crear máquinas virtuales de forma masiva en una zona, utilice 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,
  ...
}

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto.

  • ZONE : la zona en la que se crearán las máquinas virtuales.

  • NAME_PATTERN : el patrón de nombre para las máquinas virtuales. Especifique esto o perInstanceProperties . Usa una secuencia de caracteres hash ( # ) para que Compute Engine la reemplace con una secuencia de números. Por ejemplo, el uso de vm-# para el patrón de nombre genera máquinas virtuales con nombres como vm-1 y vm-2 , hasta la cantidad de máquinas virtuales especificada por --count , que debe ser menor o igual a la cantidad de máquinas virtuales que permite el patrón de nombres.

    Cuando se utiliza un patrón de nombre, Compute Engine intenta evitar conflictos de nombres verificando los nombres de las VM existentes creadas a partir de solicitudes anteriores.

  • PREDEFINED_NAME_1 , PREDEFINED_NAME_2 , ...: una lista de nombres predefinidos para que las máquinas virtuales se creen. Especifique esto o namePattern . Si utiliza esta marca y especifica COUNT , COUNT debe ser igual al número de nombres proporcionados.

  • COUNT : el número de máquinas virtuales que se van a crear. Debe ser menor o igual que la cantidad de máquinas virtuales permitidas por NAME_PATTERN . O, si usa perInstanceProperties , no tiene que especificar COUNT , pero si lo hace, debe ser igual a la cantidad de nombres proporcionados.

  • MIN_COUNT : la cantidad mínima de máquinas virtuales para crear. La siguiente tabla describe el comportamiento de la solicitud dependiendo de cómo establezca este indicador:

    Valor Descripción
    No establecido El valor predeterminado es COUNT . Si Compute Engine no puede crear la cantidad de VM especificada por COUNT , la solicitud falla y no se crea ninguna VM.
    1 Compute Engine crea tantas máquinas virtuales como sea posible, hasta COUNT .
    Mayor que 1 y menor que COUNT Compute Engine crea al menos MIN_COUNT VM hasta un máximo de COUNT VM. Si no se pueden crear MIN_COUNT máquinas virtuales, la solicitud falla y no se crea ninguna máquina virtual.

Cree máquinas virtuales con nombres de host personalizados de forma masiva

Puedes crear máquinas virtuales con nombres de host personalizados de forma masiva en una región o en una zona mediante la CLI de gcloud o la API de Compute Engine.

Debe configurar manualmente el registro DNS para su nombre de host personalizado. Para obtener más información, consulte limitaciones .

Si no especificas un nombre de host, Compute Engine establece el nombre de host para las VM como uno de los siguientes:

  • VM_NAME .c. PROJECT_ID .internal cuando habilita DNS global
  • VM_NAME . ZONE .c. PROJECT_ID .internal cuando habilita DNS zonal

Para obtener más información, consulte Nombres DNS internos .

nube de gcloud

Para crear máquinas virtuales 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 ]

Reemplace lo siguiente:

  • NAME_PATTERN : el patrón de nombre para las máquinas virtuales. Usa una secuencia de caracteres hash ( # ) para que Compute Engine la reemplace con una secuencia de números. Por ejemplo, el uso de vm-# para el patrón de nombre genera máquinas virtuales con nombres como vm-1 y vm-2 , hasta la cantidad de máquinas virtuales especificada por --count , que debe ser menor o igual a la cantidad de máquinas virtuales que permite el patrón de nombres.

    Cuando se utiliza un patrón de nombre, Compute Engine intenta evitar conflictos de nombres verificando los nombres de las VM existentes creadas a partir de solicitudes anteriores.

  • PREDEFINED_NAMES : una lista de nombres predefinidos para que las VM creen. Si utiliza esta marca y especifica 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 VM y nombres de host de dominio completo que desea asignar a las VM. Los nombres de host personalizados deben cumplir con los requisitos RFC 1035 para nombres de host válidos.

  • REGION : la zona para crear las máquinas virtuales.

  • COUNT : el número de máquinas virtuales que se van a crear. Debe ser menor o igual que la cantidad de máquinas virtuales permitidas por NAME_PATTERN . O, si usa --predefined-names , no tiene que especificar COUNT , pero si lo hace, debe ser igual a la cantidad de nombres proporcionados.

  • MIN_COUNT : la cantidad mínima de máquinas virtuales para crear. La siguiente tabla describe el comportamiento de la solicitud dependiendo de cómo establezca este indicador:

    Valor Descripción
    No establecido El valor predeterminado es COUNT . Si Compute Engine no puede crear la cantidad de VM especificada por COUNT , la solicitud falla y no se crea ninguna VM.
    1 Compute Engine crea tantas máquinas virtuales como sea posible, hasta COUNT .
    Mayor que 1 y menor que COUNT Compute Engine crea al menos MIN_COUNT VM hasta un máximo de COUNT VM. Si no se pueden crear MIN_COUNT máquinas virtuales, la solicitud falla y no se crea ninguna máquina virtual.
  • LOCATION_POLICY : las zonas a incluir o excluir dentro de una región. Utilice 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 el valor predeterminado, y DENY . El siguiente es un valor de ejemplo para este campo:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE : la distribución de máquinas virtuales en las zonas especificadas. Utilice el campo locationPolicy para especificar las zonas. La siguiente tabla muestra los valores válidos para este campo:

    Valor Descripción
    ANY_SINGLE_ZONE Impone la ubicación de VM en una sola zona y prioriza la utilización de reservas no utilizadas. Utilícelo para evitar la salida de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado.
    BALANCED Intenta distribuir las máquinas virtuales de manera uniforme en todas las zonas de la región.
    ANY Permite la distribución de máquinas virtuales en varias zonas de una región. Elige zonas que tienen recursos disponibles y que maximizan las reservas zonales no utilizadas.

DESCANSAR

Para crear máquinas virtuales con nombres de host personalizados de forma masiva en una región específica, utilice 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"
  ...
}

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto.

  • REGION : la región en la que se crearán las máquinas virtuales.

  • NAME_PATTERN : el patrón de nombre para las máquinas virtuales. Especifique esto o perInstanceProperties . Usa una secuencia de caracteres hash ( # ) para que Compute Engine la reemplace con una secuencia de números. Por ejemplo, el uso de vm-# para el patrón de nombre genera máquinas virtuales con nombres como vm-1 y vm-2 , hasta la cantidad de máquinas virtuales especificada por --count , que debe ser menor o igual a la cantidad de máquinas virtuales que permite el patrón de nombres.

    Cuando se utiliza un patrón de nombre, Compute Engine intenta evitar conflictos de nombres verificando los nombres de las VM existentes creadas a partir de solicitudes anteriores.

  • PREDEFINED_NAME_1 , PREDEFINED_NAME_2 , ...: una lista de nombres predefinidos para que las máquinas virtuales se creen. Especifique esto o namePattern . Si utiliza esta marca y especifica COUNT , COUNT debe ser igual al número de nombres proporcionados.

  • HOSTNAME_1 , HOSTNAME_2 , ...: nombres de host de dominio completos que desea asignar para las máquinas virtuales. Los nombres de host personalizados deben cumplir con los requisitos RFC 1035 para nombres de host válidos.

    Por ejemplo, para crear dos máquinas virtuales vm-1 y vm-2 con nombres de host personalizados my-host1234.example.com y test.example.com respectivamente, especifique la propiedad hostname en perInstanceProperties de la siguiente manera:

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT : el número de máquinas virtuales que se van a crear. Debe ser menor o igual que la cantidad de máquinas virtuales permitidas por NAME_PATTERN . O, si usa perInstanceProperties , no tiene que especificar COUNT , pero si lo hace, debe ser igual a la cantidad de nombres proporcionados.

  • MIN_COUNT : la cantidad mínima de máquinas virtuales para crear. La siguiente tabla describe el comportamiento de la solicitud dependiendo de cómo establezca este indicador:

    Valor Descripción
    No establecido El valor predeterminado es COUNT . Si Compute Engine no puede crear la cantidad de VM especificada por COUNT , la solicitud falla y no se crea ninguna VM.
    1 Compute Engine crea tantas máquinas virtuales como sea posible, hasta COUNT .
    Mayor que 1 y menor que COUNT Compute Engine crea al menos MIN_COUNT VM hasta un máximo de COUNT VM. Si no se pueden crear MIN_COUNT máquinas virtuales, la solicitud falla y no se crea ninguna máquina virtual.
  • LOCATION_POLICY : las zonas a incluir o excluir dentro de una región. Utilice 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 el valor predeterminado, y DENY . El siguiente es un valor de ejemplo para este campo:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE : la distribución de máquinas virtuales en las zonas especificadas. Utilice el campo locationPolicy para especificar las zonas. La siguiente tabla muestra los valores válidos para este campo:

    Valor Descripción
    ANY_SINGLE_ZONE Impone la ubicación de VM en una sola zona y prioriza la utilización de reservas no utilizadas. Utilícelo para evitar la salida de la red entre zonas o para reducir la latencia de la red. Este es el valor predeterminado.
    BALANCED Intenta distribuir las máquinas virtuales de manera uniforme en todas las zonas de la región.
    ANY Permite la distribución de máquinas virtuales en varias zonas de una región. Elige zonas que tienen recursos disponibles y que maximizan las reservas zonales no utilizadas.

Verifique el estado de una solicitud para crear máquinas virtuales de forma masiva

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, consulte Manejo de respuestas de API .

Para obtener el estado de una solicitud de inserción masiva, envíe una solicitud HTTP GET al recurso operation :

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íe la siguiente solicitud:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto en el que estás creando VM
  • REGION : la región en la que está creando máquinas virtuales
  • ZONE : la zona en la que está creando máquinas virtuales
  • OPERATION_ID : ID de operación de inserción masiva

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

  • status : el estado es uno de los siguientes:
    • CREATING : La creación de VM está en progreso
    • ROLLING_BACK : la solicitud falló y se está revirtiendo
    • DONE : la creación o reversión de la máquina virtual se completó exitosamente
  • targetVmCount : la cantidad de VM que se crearán en la zona especificada
  • createdVmCount : la cantidad de VM ya creadas en la zona especificada
  • failedToCreateVmCount : la cantidad de máquinas virtuales que no se pudieron crear en la zona especificada
  • deletedVmCount : la cantidad de máquinas virtuales que se eliminaron como parte de la reversión de una operación fallida

El campo progress en 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 exitosamente al menos la cantidad mínima de VM y no se produzca más creación de VM ni reversión de la solicitud.

Cuando la operación de inserción masiva está en curso, 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 creó una instancia con éxito y la operación se completó en un 2 %.

La operación devuelve el estado DONE cuando Compute Engine crea exitosamente al menos la cantidad mínima de VM especificada por minCount o cuando Compute Engine completa la reversión de la solicitud. Después de la creación exitosa de la cantidad solicitada de máquinas virtuales, obtendrá 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, consulte la documentación del objeto instancesBulkInsertOperationMetadata .

Verificar el estado de una sola VM

Para verificar el estado de una única VM creada a partir de una solicitud para crear VM de forma masiva, use la CLI de gcloud o la API de Compute Engine.

nube de gcloud

  1. De la Operation devuelta por la solicitud, obtenga el valor de la propiedad operationGroupId .

  2. Usa la propiedad operationGroupId como filtro con el comando gcloud compute operations list para buscar en todas las operaciones y todas las zonas del proyecto máquinas virtuales asociadas con la solicitud regional o zonal:

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. Obtenga el resto de las propiedades de la VM realizando cualquiera de las siguientes acciones:

    • De la lista de operaciones, targetLink representa la ruta de la VM. Usa el comando gcloud compute instances describe con esta ruta como nombre de la VM para obtener las propiedades de la VM:

      gcloud compute instances describe VM_NAME
      
    • Usa el comando gcloud compute instances list con un filtro que incluya los nombres de las VM 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 VM de todas las zonas y regiones, y filtra por una etiqueta que sea exclusiva de las instancias o por sus nombres:

      gcloud compute instances list \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

DESCANSAR

  1. De la Operation devuelta por la solicitud, obtenga el valor de la propiedad operationGroupId .

  2. Utilice la propiedad operationGroupId para obtener la lista de operaciones de VM asociadas con la solicitud regional o zonal:

    • Si envió una solicitud regional, para buscar en todas las operaciones y todas las zonas del proyecto, utilice el método globalOperations.aggregatedList e incluya la propiedad operationGroupId como filtro:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
      
    • Si envió una solicitud zonal, para enumerar las operaciones en esa zona, use el método zoneOperations.get e incluya 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. Obtenga el resto de las propiedades de la VM realizando cualquiera de las siguientes acciones:

    • De la lista de operaciones, targetLink representa la ruta de la VM. Utilice el método instances.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
      
    • Utilice 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)
      
    • Utilice el método instances.aggregatedList para obtener las propiedades de las máquinas virtuales de todas las zonas y regiones, y filtre por una etiqueta que sea exclusiva 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

Los siguientes ejemplos de pseudocódigo muestran cómo personalizar solicitudes para crear máquinas virtuales de forma masiva.

Cree máquinas virtuales de forma masiva en una región a partir de un conjunto de regiones

El siguiente pseudocódigo describe cómo crear 1000 máquinas virtuales en una región a partir de un conjunto de regiones. Al intentar crear máquinas virtuales de forma masiva en una región a partir de un conjunto de regiones, la solicitud primero verifica la capacidad. Si no hay suficiente capacidad, la solicitud falla inmediatamente y vuelve a intentarlo con la siguiente región del conjunto.

  1. Especifique la cantidad de máquinas virtuales que se crearán dentro de una zona.

    nTarget = 1000
    
  2. Designe las regiones en las que intentar crear las máquinas virtuales.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Itere a través de las regiones e intente crear las máquinas virtuales en cada región hasta que tenga éxito.

    for region in acceptableRegions:
      call bulk API: region=region, location-policy=location-policy, count=nTarget
      if request succeeds and the operation succeeds:
        break
    

Cree máquinas virtuales de forma masiva en una zona en un tipo de máquina

El siguiente pseudocódigo describe cómo crear varias máquinas virtuales en una zona en un tipo de máquina específico. Al intentar crear máquinas virtuales de forma masiva en el mismo tipo de máquina, la solicitud primero verifica la disponibilidad de esos tipos de máquinas. Si no hay suficiente tipo de máquina disponible, la solicitud falla inmediatamente y vuelve a intentarlo con el siguiente tipo de máquina.

  1. Especifique la cantidad de máquinas virtuales que desea crear y la región en la que crearlas.

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

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. Repita el conjunto de tipos de máquinas e intente crear las máquinas virtuales en el tipo de máquina hasta que tenga éxito.

    for family in acceptableMachineFamilies:
      call bulk APIs: region=region, count=nTarget, machineFamily=family
      if request succeeds and the operation succeeds:
        break
    

Cree más de 5000 máquinas virtuales en una zona

Al crear máquinas virtuales de forma masiva, solo puede crear 5000 máquinas virtuales con cada solicitud . El siguiente pseudocódigo describe cómo crear más de 5000 máquinas virtuales en una zona mediante la emisión de múltiples solicitudes.

  1. Especifique la cantidad de VM que se crearán, un contador para realizar un seguimiento del número 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. Emita una solicitud inicial para crear 5000 VM, guarde la zona devuelta por la solicitud y actualice el contador de la cantidad de VM creadas.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. Continúe emitiendo solicitudes para crear hasta 5000 VM a la vez en la zona hasta que Compute Engine cree la cantidad especificada de VM.

    while(nTarget - nCreated > 0):
      call bulk API: zone=targetZone, count=5000
      nCreated += # of VMs created
    

Cree máquinas virtuales de forma masiva y vea su estado

El siguiente procedimiento le muestra cómo crear un grupo de máquinas virtuales que tienen nombres predefinidos y luego ver su estado:

  1. Especifique la cantidad de máquinas virtuales que desea crear, la zona en la que crearlas y una estructura de datos en la que almacenar los nombres.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. Genere los nombres modelados para las máquinas virtuales y agregue los nombres a la estructura de datos.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. Cree las máquinas virtuales y utilice perInstanceProperties para especificar los nombres.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. Obtenga los detalles de las máquinas virtuales utilizando el método instances.list con un filtro para los nombres de las máquinas virtuales sobre las que devolver los detalles.

    instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
    

¿Qué sigue?

Después de crear máquinas virtuales de forma masiva, realice una de las siguientes acciones o ambas para simplificar la administración de dichas máquinas virtuales: