Criar VMs em massa


Quando você quiser criar um grande número de instâncias de máquina virtual (VM) que são idênticas e independentes umas das outras, crie VMs em massa usando a CLI do Google Cloud ou a API Compute Engine. É possível criar essas VMs em todas as zonas de uma região ou distribuídas em determinadas zonas.

Para mais detalhes e limitações associadas, consulte Sobre a criação em massa de VMs.

Antes de começar

  • Para VMs e quaisquer recursos relacionados que você planeja criar, verifique se você tem cota suficiente e permissões necessárias.
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    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 as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

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

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Funções exigidas

Para receber as permissões necessárias e criar VMs em massa, peça ao administrador para conceder a você o papel do IAM de Administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para criar VMs em massa. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para criar VMs em massa:

  • compute.instances.create no projeto
  • Usar uma imagem personalizada a fim de criar a VM: compute.images.useReadOnly na imagem
  • Usar um snapshot para criar a VM: compute.snapshots.useReadOnly no snapshot
  • Usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
  • Atribuir uma rede legada à VM: compute.networks.use no projeto
  • Especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Atribuir um endereço IP externo à VM ao usar uma rede legada: compute.networks.useExternalIp no projeto
  • Especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
  • Definir tags para a VM: compute.instances.setTags na VM
  • Definir rótulos para a VM: compute.instances.setLabels na VM
  • Definir uma conta de serviço a ser usada pela VM: compute.instances.setServiceAccount na VM
  • Criar um disco para a VM: compute.disks.create no projeto
  • Anexar um disco atual no modo somente leitura ou de leitura e gravação: compute.disks.use no disco
  • Anexar um disco atual no modo somente leitura: compute.disks.useReadOnly no disco

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Criar VMs em massa em uma região

Para criar VMs em massa em uma região, use a gcloud CLI ou a API Compute Engine.

Se você especificar um tipo de máquina ou suporte para hardware adicional, como uma GPU ou um SSD local, o Compute Engine colocará as VMs em uma zona dentro da região que seja compatível com o tipo de máquina e o hardware extra.

gcloud

Para criar VMs em massa em uma região, use o seguinte 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 ]

Substitua:

  • NAME_PATTERN: o padrão de nome para as VMs. Use uma sequência de caracteres de hash (#) no Compute Engine para substituir por uma sequência de números. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count, que precisa ser menor ou igual ao número de VMs que o padrão de nome permite.

    Ao usar um padrão de nome, o Compute Engine tenta evitar conflitos de nome verificando os nomes das VMs existentes criadas com base nas solicitações anteriores.

  • PREDEFINED_NAMES: uma lista de nomes predefinidos das VMs a serem criadas. Se estiver usando essa sinalização e especificando COUNT, COUNT precisa ser igual ao número de nomes fornecidos.

  • REGION: a região em que as VMs serão criadas.

  • COUNT: o número de VMs a serem criadas. Precisa ser menor ou igual ao número de VMs permitidas por NAME_PATTERN. Ao usar --predefined-names, não é necessário especificar COUNT. No entanto, ao fazer essa especificação, o valor precisa ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a serem criadas. A tabela a seguir descreve o comportamento da solicitação, dependendo de como você definir essa sinalização:

    Valor Descrição
    Não definido O valor padrão é COUNT. Se o Compute Engine não puder criar o número de VMs especificado por COUNT, a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o máximo de VMs possível, até COUNT.
    Maior que 1 e menor que COUNT O Compute Engine cria pelo menos MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar MIN_COUNT VMs, a solicitação falhará e nenhuma VM será criada.
  • LOCATION_POLICY: as zonas a serem incluídas ou excluídas em uma região. Use uma lista de pares de chave-valor, com a zona como a chave e a política como o valor. Os valores válidos para a política são allow, que é o padrão, e deny. Veja a seguir um exemplo de valor dessa sinalização:

    --location-policy=us-east1-b=allow,us-east1-c=deny
    
  • TARGET_DISTRIBUTION_SHAPE: a distribuição das VMs entre as zonas especificadas. Use a sinalização --location-policy para especificar as zonas. A tabela a seguir mostra os valores válidos para essa sinalização:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VMs em uma única zona e prioriza o uso de reservas não utilizadas. Use isso para evitar a saída de rede entre zonas ou reduzir a latência da rede. Esse é o valor padrão.
    BALANCED Tenta distribuir VMs de maneira uniforme em todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas de uma região. Escolhe zonas que têm recursos disponíveis e que maximizam reservas por zona não utilizadas.

REST

Para criar VMs em massa em uma região, use o seguinte 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"
  ...
}

Substitua:

  • PROJECT_ID: o ID do projeto;

  • REGION: a região em que as VMs serão criadas.

  • NAME_PATTERN: o padrão de nome para as VMs. Especifique esse ou perInstanceProperties. Use uma sequência de caracteres de hash (#) no Compute Engine para substituir por uma sequência de números. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count, que precisa ser menor ou igual ao número de VMs que o padrão de nome permite.

    Ao usar um padrão de nome, o Compute Engine tenta evitar conflitos de nome verificando os nomes das VMs existentes criadas com base nas solicitações anteriores.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: uma lista de nomes predefinidos das VMs a serem criadas. Especifique esse ou namePattern. Se estiver usando essa sinalização e especificando COUNT, COUNT precisará ser igual ao número de nomes fornecidos.

  • COUNT: o número de VMs a serem criadas. Precisa ser menor ou igual ao número de VMs permitidas por NAME_PATTERN. Ao usar perInstanceProperties, não é necessário especificar COUNT. No entanto, ao fazer essa especificação, o valor precisa ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a serem criadas. A tabela a seguir descreve o comportamento da solicitação, dependendo de como você definir essa sinalização:

    Valor Descrição
    Não definido O valor padrão é COUNT. Se o Compute Engine não puder criar o número de VMs especificado por COUNT, a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o máximo de VMs possível, até COUNT.
    Maior que 1 e menor que COUNT O Compute Engine cria pelo menos MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar MIN_COUNT VMs, a solicitação falhará e nenhuma VM será criada.
  • LOCATION_POLICY: as zonas a serem incluídas ou excluídas em uma região. Use uma lista de pares de chave-valor, com a zona como a chave e a política como o valor. Os valores válidos para a política são ALLOW, que é o padrão, e DENY. Veja a seguir um exemplo desse valor:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: a distribuição de VMs nas zonas especificadas. Use o campo locationPolicy para especificar as zonas. A tabela a seguir mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VMs em uma única zona e prioriza o uso de reservas não utilizadas. Use isso para evitar a saída de rede entre zonas ou reduzir a latência da rede. Esse é o valor padrão.
    BALANCED Tenta distribuir VMs de maneira uniforme em todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas de uma região. Escolhe zonas que têm recursos disponíveis e que maximizam reservas por zona não utilizadas.

Criar VMs em massa em uma zona

Para criar VMs em massa em uma zona, use a gcloud CLI ou a API Compute Engine.

gcloud

Para criar VMs em massa em uma zona específica, use o seguinte 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 ]

Substitua:

  • NAME_PATTERN: o padrão de nome para as VMs. Use uma sequência de caracteres de hash (#) no Compute Engine para substituir por uma sequência de números. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count, que precisa ser menor ou igual ao número de VMs que o padrão de nome permite.

    Ao usar um padrão de nome, o Compute Engine tenta evitar conflitos de nome verificando os nomes das VMs existentes criadas com base nas solicitações anteriores.

  • PREDEFINED_NAMES: uma lista de nomes predefinidos das VMs a serem criadas. Se estiver usando essa sinalização e especificando COUNT, COUNT precisa ser igual ao número de nomes fornecidos.

  • ZONE: zona em que as VMs serão criadas.

  • COUNT: o número de VMs a serem criadas. Precisa ser menor ou igual ao número de VMs permitidas por NAME_PATTERN. Ao usar --predefined-names, não é necessário especificar COUNT. No entanto, ao fazer essa especificação, o valor precisa ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a serem criadas. A tabela a seguir descreve o comportamento da solicitação, dependendo de como você definir essa sinalização:

    Valor Descrição
    Não definido O valor padrão é COUNT. Se o Compute Engine não puder criar o número de VMs especificado por COUNT, a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o máximo de VMs possível, até COUNT.
    Maior que 1 e menor que COUNT O Compute Engine cria pelo menos MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar MIN_COUNT VMs, a solicitação falhará e nenhuma VM será criada.

REST

Para criar VMs em massa em uma zona, use o seguinte 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,
  ...
}

Substitua:

  • PROJECT_ID: o ID do projeto;

  • ZONE: zona em que as VMs serão criadas.

  • NAME_PATTERN: o padrão de nome para as VMs. Especifique esse ou perInstanceProperties. Use uma sequência de caracteres de hash (#) no Compute Engine para substituir por uma sequência de números. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count, que precisa ser menor ou igual ao número de VMs que o padrão de nome permite.

    Ao usar um padrão de nome, o Compute Engine tenta evitar conflitos de nome verificando os nomes das VMs existentes criadas com base nas solicitações anteriores.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: uma lista de nomes predefinidos das VMs a serem criadas. Especifique esse ou namePattern. Se estiver usando essa sinalização e especificando COUNT, COUNT precisará ser igual ao número de nomes fornecidos.

  • COUNT: o número de VMs a serem criadas. Precisa ser menor ou igual ao número de VMs permitidas por NAME_PATTERN. Ao usar perInstanceProperties, não é necessário especificar COUNT. No entanto, ao fazer essa especificação, o valor precisa ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a serem criadas. A tabela a seguir descreve o comportamento da solicitação, dependendo de como você definir essa sinalização:

    Valor Descrição
    Não definido O valor padrão é COUNT. Se o Compute Engine não puder criar o número de VMs especificado por COUNT, a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o máximo de VMs possível, até COUNT.
    Maior que 1 e menor que COUNT O Compute Engine cria pelo menos MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar MIN_COUNT VMs, a solicitação falhará e nenhuma VM será criada.

Criar VMs com nomes de host personalizados em massa

É possível criar VMs com nomes de host personalizados em massa em uma região ou zona usando a gcloud CLI ou a API Compute Engine.

Você precisa configurar manualmente o registro DNS com o nome de host personalizado. Saiba mais em Limitações.

Se você não especificar um nome de host para as VMs, o Compute Engine vai defini-lo como uma das seguintes opções:

  • VM_NAME.c.PROJECT_ID.internal quando você ativar o DNS global
  • VM_NAME.ZONE.c.PROJECT_ID.internal quando você ativar o DNS zonal

Para mais informações, consulte Nomes DNS internos.

gcloud

Para criar VMs em massa com nomes de host personalizados em uma região específica, use o comando gcloud beta compute instances bulk create a seguir.

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 ]

Substitua:

  • NAME_PATTERN: o padrão de nome para as VMs. Use uma sequência de caracteres de hash (#) no Compute Engine para substituir por uma sequência de números. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count, que precisa ser menor ou igual ao número de VMs que o padrão de nome permite.

    Ao usar um padrão de nome, o Compute Engine tenta evitar conflitos de nome verificando os nomes das VMs existentes criadas com base nas solicitações anteriores.

  • PREDEFINED_NAMES: uma lista de nomes predefinidos das VMs a serem criadas. Se estiver usando essa sinalização e especificando COUNT, COUNT precisa ser igual ao número de nomes fornecidos.

  • [VM_NAME=HOSTNAME, ...]: uma lista de pares de chave-valor de nomes predefinidos para as VMs e nomes de host de domínio totalmente qualificados que você quer atribuir às VMs. Os nomes de host personalizados precisam estar em conformidade com os requisitos do RFC 1035 para nomes de host válidos.

  • REGION: zona em que as VMs serão criadas.

  • COUNT: o número de VMs a serem criadas. Precisa ser menor ou igual ao número de VMs permitidas por NAME_PATTERN. Ao usar --predefined-names, não é necessário especificar COUNT. No entanto, ao fazer essa especificação, o valor precisa ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a serem criadas. A tabela a seguir descreve o comportamento da solicitação, dependendo de como você definir essa sinalização:

    Valor Descrição
    Não definido O valor padrão é COUNT. Se o Compute Engine não puder criar o número de VMs especificado por COUNT, a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o máximo de VMs possível, até COUNT.
    Maior que 1 e menor que COUNT O Compute Engine cria pelo menos MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar MIN_COUNT VMs, a solicitação falhará e nenhuma VM será criada.
  • LOCATION_POLICY: as zonas a serem incluídas ou excluídas em uma região. Use uma lista de pares de chave-valor, com a zona como a chave e a política como o valor. Os valores válidos para a política são ALLOW, que é o padrão, e DENY. Veja a seguir um exemplo desse valor:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: a distribuição de VMs nas zonas especificadas. Use o campo locationPolicy para especificar as zonas. A tabela a seguir mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VMs em uma única zona e prioriza o uso de reservas não utilizadas. Use isso para evitar a saída de rede entre zonas ou reduzir a latência da rede. Esse é o valor padrão.
    BALANCED Tenta distribuir VMs de maneira uniforme em todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas de uma região. Escolhe zonas que têm recursos disponíveis e que maximizam reservas por zona não utilizadas.

REST

Para criar VMs com nomes de host personalizados em massa em uma região específica, use o seguinte 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"
  ...
}

Substitua:

  • PROJECT_ID: o ID do projeto;

  • REGION: a região em que as VMs serão criadas.

  • NAME_PATTERN: o padrão de nome para as VMs. Especifique esse ou perInstanceProperties. Use uma sequência de caracteres de hash (#) no Compute Engine para substituir por uma sequência de números. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count, que precisa ser menor ou igual ao número de VMs que o padrão de nome permite.

    Ao usar um padrão de nome, o Compute Engine tenta evitar conflitos de nome verificando os nomes das VMs existentes criadas com base nas solicitações anteriores.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: uma lista de nomes predefinidos das VMs a serem criadas. Especifique esse ou namePattern. Se estiver usando essa sinalização e especificando COUNT, COUNT precisará ser igual ao número de nomes fornecidos.

  • HOSTNAME_1, HOSTNAME_2, ...: nomes de host de domínio totalmente qualificados que você quer atribuir às VMs. Os nomes de host personalizados precisam estar em conformidade com os requisitos do RFC 1035 para nomes de host válidos.

    Por exemplo, para criar duas VMs vm-1 e vm-2 com nomes de host personalizados my-host1234.example.com e test.example.com, respectivamente, especifique a propriedade hostname em perInstanceProperties da seguinte maneira:

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT: o número de VMs a serem criadas. Precisa ser menor ou igual ao número de VMs permitidas por NAME_PATTERN. Ao usar perInstanceProperties, não é necessário especificar COUNT. No entanto, ao fazer essa especificação, o valor precisa ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a serem criadas. A tabela a seguir descreve o comportamento da solicitação, dependendo de como você definir essa sinalização:

    Valor Descrição
    Não definido O valor padrão é COUNT. Se o Compute Engine não puder criar o número de VMs especificado por COUNT, a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o máximo de VMs possível, até COUNT.
    Maior que 1 e menor que COUNT O Compute Engine cria pelo menos MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar MIN_COUNT VMs, a solicitação falhará e nenhuma VM será criada.
  • LOCATION_POLICY: as zonas a serem incluídas ou excluídas em uma região. Use uma lista de pares de chave-valor, com a zona como a chave e a política como o valor. Os valores válidos para a política são ALLOW, que é o padrão, e DENY. Veja a seguir um exemplo desse valor:

    "locations": {
      "zones/us-central1-a": { "preference": "ALLOW" },
      "zones/us-central1-c": { "preference": "DENY"  },
      ...
    },
    
  • TARGET_DISTRIBUTION_SHAPE: a distribuição de VMs nas zonas especificadas. Use o campo locationPolicy para especificar as zonas. A tabela a seguir mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VMs em uma única zona e prioriza o uso de reservas não utilizadas. Use isso para evitar a saída de rede entre zonas ou reduzir a latência da rede. Esse é o valor padrão.
    BALANCED Tenta distribuir VMs de maneira uniforme em todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas de uma região. Escolhe zonas que têm recursos disponíveis e que maximizam reservas por zona não utilizadas.

Verificar o status de uma solicitação para criar VMs em massa

Quando você cria uma solicitação de mutação, o Compute Engine retorna um recurso operation que pode ser pesquisado para receber o status da operação. Para mais informações, consulte Como gerenciar respostas de API.

Para ver o status de uma solicitação de inserção em massa, envie uma solicitação GET HTTP ao recurso operation:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID

Para ver o status de uma solicitação de inserção em massa regional, envie a seguinte solicitação:

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

Substitua:

  • PROJECT_ID: o ID do projeto em que você está criando VMs.
  • REGION: a região em que você está criando VMs.
  • ZONE: a zona em que você está criando VMs.
  • OPERATION_ID: o ID da operação de inserção em massa.

O objeto instancesBulkInsertOperationMetadata na resposta contém os seguintes detalhes da operação:

  • status: o status é um dos seguintes:
    • CREATING: a criação da VM está em andamento
    • ROLLING_BACK: a solicitação falhou, e ela está sendo revertida.
    • DONE: a criação ou reversão da VM foi concluída.
  • targetVmCount: o número de VMs a serem criadas na zona especificada
  • createdVmCount: o número de VMs já criadas na zona especificada
  • failedToCreateVmCount: o número de VMs que não foram criadas na zona especificada
  • deletedVmCount: o número de VMs que foram excluídas como parte da reversão de uma operação com falha

O campo progress na resposta representa a porcentagem de conclusão da operação.

O status da operação de inserção em massa é RUNNING até que o Compute Engine crie pelo menos o número mínimo de VMs e não ocorra mais criação ou reversão da solicitação.

Quando a operação de inserção em massa estiver em andamento, você verá uma resposta semelhante a esta:

{
  "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
         }
      }
    }
}

Neste exemplo, uma instância foi criada com sucesso e a operação está 2% concluída.

A operação retorna o status DONE quando o Compute Engine cria com êxito pelo menos o número mínimo de VMs especificado por minCount ou quando o Compute Engine conclui a reversão da solicitação. Após a criação do número solicitado de VMs, você receberá uma resposta semelhante a esta:

{
  "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 mais informações, consulte a documentação do objeto instancesBulkInsertOperationMetadata.

Verificar o status de uma única VM

Para verificar o status de uma única VM criada com base em uma solicitação de criação em massa, use a gcloud CLI ou a API Compute Engine.

gcloud

  1. Na Operation retornada pela solicitação, acesse o valor da propriedade operationGroupId.

  2. Use a propriedade operationGroupId como um filtro com o comando gcloud compute operations list para pesquisar todas as operações e todas as zonas no projeto para VMs associadas à solicitação regional ou zonal:

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. Consiga o restante das propriedades da VM seguindo um destes procedimentos:

    • Na lista de operações, o targetLink representa o caminho da VM. Use o método gcloud compute instances describe com este caminho como o nome da VM para conseguir as propriedades completas da VM:

      gcloud compute instances describe VM_NAME
      
    • Use o método gcloud compute instances list com um filtro que inclua os nomes das VMs da lista de operações:

      gcloud compute instances list VM_NAME \
         --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Use o comando gcloud compute instances list para acessar as propriedades das VMs de todas as zonas e regiões e filtre por um rótulo exclusivo das instâncias ou por seus nomes:

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

REST

  1. Na Operation retornada pela solicitação, acesse o valor da propriedade operationGroupId.

  2. Use a propriedade operationGroupId para conferir a lista de operações de VM associadas à solicitação regional ou zonal:

    • Se você enviou uma solicitação regional, para pesquisar em todas as operações e zonas do projeto, use o método globalOperations.aggregatedList e inclua a propriedade operationGroupId como um filtro:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
      
    • Se você enviou uma solicitação zonal, para listar as operações nessa zona, use o método zoneOperations.get e inclua a propriedade operationGroupId no corpo da solicitação:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert
      
      {
      ...
      "operationGroupId":"OPERATION_GROUP_ID"
      ...
      }
      
  3. Consiga o restante das propriedades da VM seguindo um destes procedimentos:

    • Na lista de operações, o targetLink representa o caminho da VM. Use o método instances.get com esse caminho como o nome da VM para acessar todas as propriedades da VM:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
      
    • Use o método instances.get com um filtro que inclua os nomes das VMs da lista de operações:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      
    • Use o método instances.aggregatedList para acessar as propriedades das VMs de todas as zonas e regiões e filtre por um rótulo exclusivo das instâncias ou por seus nomes:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

Exemplos de pseudocódigo

Nos exemplos de pseudocódigo a seguir, mostramos como personalizar solicitações para criar VMs em massa.

Criar VMs em massa em uma região a partir de um conjunto de regiões

Veja no pseudocódigo a seguir como criar 1.000 VMs em uma região a partir de um conjunto de regiões. Ao tentar criar VMs em massa em uma região de um conjunto de regiões, a solicitação primeiro verifica a capacidade. Se não houver capacidade suficiente, a solicitação falhará imediatamente e será feita de novo com a próxima região do conjunto.

  1. Especifique o número de VMs para criar dentro de uma zona.

    nTarget = 1000
    
  2. Designe as regiões em que você quer criar as VMs.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Faça a iteração nas regiões e tente criar as VMs em cada região até ter sucesso.

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

Criar VMs em massa em uma zona em um tipo de máquina

Este pseudocódigo descreve como criar várias VMs em uma zona em um tipo de máquina especificado. Ao tentar criar VMs em massa no mesmo tipo de máquina, a solicitação primeiro verifica a disponibilidade desses tipos. Se não houver uma quantidade suficiente do tipo de máquina disponível, a solicitação falhará imediatamente e tentará de novo com o próximo tipo de máquina.

  1. Especifique o número de VMs a serem criadas e a região para criá-las.

    nTarget = 1000
    region = "us-central1"
    
  2. Especifique as famílias de máquinas para tentar criar as VMs.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. Faça a iteração pelo conjunto de tipos de máquina e tente criar as VMs no tipo de máquina até ser bem-sucedido.

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

Criar mais de 5.000 VMs em uma zona

Ao criar VMs em massa, só é possível criar 5.000 VMs com cada solicitação. O pseudocódigo a seguir descreve como criar mais de 5.000 VMs em uma zona emitindo várias solicitações.

  1. Especifique o número de VMs para criar, um contador para rastrear o número total de VMs criadas, a região onde as VMs serão criadas e uma variável para armazenar a zona em que o Compute Engine cria as VMs.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. Emita uma solicitação inicial para criar 5.000 VMs, salvar a zona retornada pela solicitação e atualizar o contador do número de VMs criadas.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. Continue enviando solicitações para criar até 5.000 VMs por vez na zona até que o Compute Engine crie o número especificado de VMs.

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

Criar VMs em massa e ver o status delas

No procedimento a seguir, mostramos como criar um grupo de VMs com nomes predefinidos e visualizar o status deles:

  1. Especifique o número de VMs para criar, a zona onde criá-las e uma estrutura de dados para armazenar os nomes.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. Gere os nomes padronizados das VMs e adicione os nomes à estrutura de dados.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. Crie as VMs e use perInstanceProperties para especificar os nomes.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. Use o método instances.list com um filtro para os nomes das VMs para retornar os detalhes das VMs.

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

A seguir

Depois de criar VMs em massa, realize um ou ambos os procedimentos para simplificar o gerenciamento: