Crie VMs em massa


Quando quiser criar um grande número de instâncias de máquinas virtuais (VMs) idênticas e independentes entre si, crie VMs em massa através da Google Cloud CLI ou da API Compute Engine. Pode criar estas VMs em todas as zonas numa região ou distribuídas por determinadas zonas.

Para ver mais detalhes e limitações associadas, consulte o artigo Acerca da criação em massa de VMs. Se quiser criar instâncias com GPUs anexadas, consulte o artigo Crie VMs de GPU em massa.

Antes de começar

  • Para VMs e quaisquer recursos relacionados que planeia criar, certifique-se de que tem quota suficiente e as autorizações necessárias.
  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-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. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

Funções necessárias

Para receber as autorizações de que precisa para criar VMs em massa, peça ao seu administrador para lhe conceder a função de IAM Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para criar VMs em massa. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

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

  • compute.instances.create no projeto
  • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
  • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
  • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
  • Para especificar uma sub-rede para a sua VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Para atribuir um endereço IP externo à VM quando usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Para atribuir uma rede antiga à VM: compute.networks.use no projeto
  • Para atribuir um endereço IP externo à VM quando usar uma rede antiga: compute.networks.useExternalIp no projeto
  • Para definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
  • Para definir etiquetas para a VM: compute.instances.setTags na VM
  • Para definir etiquetas para a VM: compute.instances.setLabels na VM
  • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
  • Para criar um novo disco para a VM: compute.disks.create no projeto
  • Para anexar um disco existente no modo de leitura ou leitura/escrita: compute.disks.use no disco
  • Para anexar um disco existente no modo de leitura: compute.disks.useReadOnly no disco

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Crie VMs em massa numa região

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

Se especificar um tipo de máquina ou suporte para hardware adicional, como uma GPU ou um SSD local, o Compute Engine coloca as VMs numa zona na região que suporta o tipo de máquina e o hardware adicional.

gcloud

Para criar VMs em massa numa região, use o seguinte gcloud compute instances bulk createcomando:

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 o seguinte:

  • NAME_PATTERN: o padrão de nome para as VMs. Use uma sequência de carateres de cardinal (#) para o Compute Engine 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é ao número de VMs especificado por --count, que tem de ser inferior ou igual ao número de VMs que o padrão de nome permite.

    Quando usa um padrão de nome, o Compute Engine tenta evitar conflitos de nomes verificando os nomes das VMs existentes criadas a partir de pedidos anteriores.

  • PREDEFINED_NAMES: uma lista de nomes predefinidos para as VMs a criar. Se usar esta flag e especificar COUNT, COUNT tem de ser igual ao número de nomes fornecidos.

  • REGION: a região na qual criar as VMs.

  • COUNT: o número de VMs a criar. Tem de ser inferior ou igual ao número de VMs permitidas por NAME_PATTERN. Em alternativa, se usar --predefined-names, não tem de especificar COUNT, mas, se o fizer, tem de ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a criar. A tabela seguinte descreve o comportamento do pedido consoante a forma como define esta flag:

    Valor Descrição
    Não definido O valor predefinido é COUNT. Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT, o pedido falha e não são criadas VMs.
    1 O Compute Engine cria o maior número possível de VMs, até COUNT.
    Superior a 1 e inferior a COUNT O Compute Engine cria, pelo menos, MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar VMs MIN_COUNT, o pedido falha e não são criadas VMs.
  • LOCATION_POLICY: as zonas a incluir ou excluir numa região. Use uma lista de pares de chave-valor, com a zona como chave e a política como valor. Os valores válidos para a política são allow, que é o valor predefinido, e deny. Segue-se um valor de exemplo para esta flag:

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

    Valor Descrição
    ANY_SINGLE_ZONE Impõe o posicionamento de VMs numa única zona e dá prioridade à utilização de reservas não usadas. Use esta opção para evitar a saída da rede entre zonas ou para reduzir a latência da rede. Este é o valor predefinido.
    BALANCED Tenta distribuir as VMs uniformemente por todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas numa região. Escolhe zonas com recursos disponíveis e que maximizam as reservas zonais não usadas.

REST

Para criar VMs em massa numa região, use o seguinte instances.bulkInsert método:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_DISTRIBUTION_SHAPE"
  ...
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto.

  • REGION: a região na qual criar as VMs.

  • NAME_PATTERN: o padrão de nome para as VMs. Especifique esta propriedade ou perInstanceProperties. Use uma sequência de carateres de hash (#) para o Compute Engine 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é ao número de VMs especificado por --count, que tem de ser inferior ou igual ao número de VMs que o padrão de nome permite.

    Quando usa um padrão de nome, o Compute Engine tenta evitar conflitos de nomes verificando os nomes das VMs existentes criadas a partir de pedidos anteriores.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: uma lista de nomes predefinidos para as VMs a criar. Especifique esta propriedade ou namePattern. Se usar esta flag e especificar COUNT, COUNT tem de ser igual ao número de nomes fornecidos.

  • COUNT: o número de VMs a criar. Tem de ser inferior ou igual ao número de VMs permitidas por NAME_PATTERN. Em alternativa, se usar perInstanceProperties, não tem de especificar COUNT, mas, se o fizer, tem de ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a criar. A tabela seguinte descreve o comportamento do pedido consoante a forma como define esta flag:

    Valor Descrição
    Não definido O valor predefinido é COUNT. Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT, o pedido falha e não são criadas VMs.
    1 O Compute Engine cria o maior número possível de VMs, até COUNT.
    Superior a 1 e inferior a COUNT O Compute Engine cria, pelo menos, MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar VMs MIN_COUNT, o pedido falha e não são criadas VMs.
  • LOCATION_POLICY: as zonas a incluir ou excluir numa região. Use uma lista de pares de chave-valor, com a zona como chave e a política como valor. Os valores válidos para a política são ALLOW, que é o valor predefinido, e DENY. Segue-se um valor de exemplo para este campo:

    "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 seguinte mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Impõe o posicionamento de VMs numa única zona e dá prioridade à utilização de reservas não usadas. Use esta opção para evitar a saída da rede entre zonas ou para reduzir a latência da rede. Este é o valor predefinido.
    BALANCED Tenta distribuir as VMs uniformemente por todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas numa região. Escolhe zonas com recursos disponíveis e que maximizam as reservas zonais não usadas.

Crie VMs em massa numa zona

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

gcloud

Para criar VMs em massa numa zona específica, use o seguinte gcloud compute instances bulk create comando.

gcloud compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --zone=ZONE \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]

Substitua o seguinte:

  • NAME_PATTERN: o padrão de nome para as VMs. Use uma sequência de carateres de cardinal (#) para o Compute Engine 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é ao número de VMs especificado por --count, que tem de ser inferior ou igual ao número de VMs que o padrão de nome permite.

    Quando usa um padrão de nome, o Compute Engine tenta evitar conflitos de nomes verificando os nomes das VMs existentes criadas a partir de pedidos anteriores.

  • PREDEFINED_NAMES: uma lista de nomes predefinidos para as VMs a criar. Se usar esta flag e especificar COUNT, COUNT tem de ser igual ao número de nomes fornecidos.

  • ZONE: a zona na qual criar as VMs.

  • COUNT: o número de VMs a criar. Tem de ser inferior ou igual ao número de VMs permitidas por NAME_PATTERN. Em alternativa, se usar --predefined-names, não tem de especificar COUNT, mas, se o fizer, tem de ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a criar. A tabela seguinte descreve o comportamento do pedido consoante a forma como define esta flag:

    Valor Descrição
    Não definido O valor predefinido é COUNT. Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT, o pedido falha e não são criadas VMs.
    1 O Compute Engine cria o maior número possível de VMs, até COUNT.
    Superior a 1 e inferior a COUNT O Compute Engine cria, pelo menos, MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar VMs MIN_COUNT, o pedido falha e não são criadas VMs.

REST

Para criar VMs em massa numa zona, use o seguinte instances.bulkInsert método.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {},
    "PREDEFINED_NAME_2": {},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  ...
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto.

  • ZONE: a zona na qual criar as VMs.

  • NAME_PATTERN: o padrão de nome para as VMs. Especifique esta propriedade ou perInstanceProperties. Use uma sequência de carateres de hash (#) para o Compute Engine 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é ao número de VMs especificado por --count, que tem de ser inferior ou igual ao número de VMs que o padrão de nome permite.

    Quando usa um padrão de nome, o Compute Engine tenta evitar conflitos de nomes verificando os nomes das VMs existentes criadas a partir de pedidos anteriores.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: uma lista de nomes predefinidos para as VMs a criar. Especifique esta propriedade ou namePattern. Se usar esta flag e especificar COUNT, COUNT tem de ser igual ao número de nomes fornecidos.

  • COUNT: o número de VMs a criar. Tem de ser inferior ou igual ao número de VMs permitidas por NAME_PATTERN. Em alternativa, se usar perInstanceProperties, não tem de especificar COUNT, mas, se o fizer, tem de ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a criar. A tabela seguinte descreve o comportamento do pedido consoante a forma como define esta flag:

    Valor Descrição
    Não definido O valor predefinido é COUNT. Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT, o pedido falha e não são criadas VMs.
    1 O Compute Engine cria o maior número possível de VMs, até COUNT.
    Superior a 1 e inferior a COUNT O Compute Engine cria, pelo menos, MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar VMs MIN_COUNT, o pedido falha e não são criadas VMs.

Crie VMs com nomes de anfitrião personalizados em massa

Pode criar VMs com nomes de anfitrião personalizados em massa numa região ou numa zona através da CLI gcloud ou da API Compute Engine.

Tem de configurar manualmente o registo DNS para o nome de anfitrião personalizado. Para mais informações, consulte as limitações.

Se não especificar um nome de anfitrião, o Compute Engine define o nome de anfitrião para as VMs como um dos seguintes:

  • VM_NAME.c.PROJECT_ID.internal quando ativa o DNS global
  • VM_NAME.ZONE.c.PROJECT_ID.internal quando ativa o DNS zonal

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

gcloud

Para criar VMs em massa com nomes de anfitrião personalizados numa região específica, use o seguinte gcloud beta compute instances bulk create comando.

gcloud beta compute instances bulk create \
    ( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
    --per-instance-hostnames=[VM_NAME=HOSTNAME,...] \
    --zone=REGION \
    --count=COUNT \
    [ --min-count=MIN_COUNT ]
    [--location-policy=LOCATION_POLICY \ ]
    [--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]

Substitua o seguinte:

  • NAME_PATTERN: o padrão de nome para as VMs. Use uma sequência de carateres de cardinal (#) para o Compute Engine 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é ao número de VMs especificado por --count, que tem de ser inferior ou igual ao número de VMs que o padrão de nome permite.

    Quando usa um padrão de nome, o Compute Engine tenta evitar conflitos de nomes verificando os nomes das VMs existentes criadas a partir de pedidos anteriores.

  • PREDEFINED_NAMES: uma lista de nomes predefinidos para as VMs a criar. Se usar esta flag e especificar COUNT, COUNT tem de 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 anfitriões de domínio totalmente qualificados que quer atribuir às VMs. Os nomes de anfitrião personalizados têm de estar em conformidade com os requisitos da RFC 1035 para nomes de anfitrião válidos.

  • REGION: a zona na qual criar as VMs.

  • COUNT: o número de VMs a criar. Tem de ser inferior ou igual ao número de VMs permitidas por NAME_PATTERN. Em alternativa, se usar --predefined-names, não tem de especificar COUNT, mas, se o fizer, tem de ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a criar. A tabela seguinte descreve o comportamento do pedido consoante a forma como define esta flag:

    Valor Descrição
    Não definido O valor predefinido é COUNT. Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT, o pedido falha e não são criadas VMs.
    1 O Compute Engine cria o maior número possível de VMs, até COUNT.
    Superior a 1 e inferior a COUNT O Compute Engine cria, pelo menos, MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar VMs MIN_COUNT, o pedido falha e não são criadas VMs.
  • LOCATION_POLICY: as zonas a incluir ou excluir numa região. Use uma lista de pares de chave-valor, com a zona como chave e a política como valor. Os valores válidos para a política são ALLOW, que é o valor predefinido, e DENY. Segue-se um valor de exemplo para este campo:

    "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 seguinte mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Impõe o posicionamento de VMs numa única zona e dá prioridade à utilização de reservas não usadas. Use esta opção para evitar a saída da rede entre zonas ou para reduzir a latência da rede. Este é o valor predefinido.
    BALANCED Tenta distribuir as VMs uniformemente por todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas numa região. Escolhe zonas com recursos disponíveis e que maximizam as reservas zonais não usadas.

REST

Para criar VMs com nomes de anfitrião personalizados em massa numa região específica, use o seguinte instances.bulkInsert método:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert

{
  ...
  "namePattern": "NAME_PATTERN",
  "perInstanceProperties": {
    "PREDEFINED_NAME_1": {"hostname": HOSTNAME_1},
    "PREDEFINED_NAME_2": {"hostname": HOSTNAME_2},
    ...
  },
  "count": COUNT,
  "minCount": MIN_COUNT,
  "locationPolicy": {
    "LOCATION_POLICY"
    },
    "targetShape": "TARGET_DISTRIBUTION_SHAPE"
  ...
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto.

  • REGION: a região na qual criar as VMs.

  • NAME_PATTERN: o padrão de nome para as VMs. Especifique esta propriedade ou perInstanceProperties. Use uma sequência de carateres de hash (#) para o Compute Engine 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é ao número de VMs especificado por --count, que tem de ser inferior ou igual ao número de VMs que o padrão de nome permite.

    Quando usa um padrão de nome, o Compute Engine tenta evitar conflitos de nomes verificando os nomes das VMs existentes criadas a partir de pedidos anteriores.

  • PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: uma lista de nomes predefinidos para as VMs a criar. Especifique esta propriedade ou namePattern. Se usar esta flag e especificar COUNT, COUNT tem de ser igual ao número de nomes fornecidos.

  • HOSTNAME_1, HOSTNAME_2, ...: nomes de anfitriões de domínio totalmente qualificados que quer atribuir às VMs. Os nomes de anfitrião personalizados têm de estar em conformidade com os requisitos da RFC 1035 para nomes de anfitrião válidos.

    Por exemplo, para criar duas VMs vm-1 e vm-2 com nomes de anfitrião personalizados my-host1234.example.com e test.example.com, respetivamente, especifique a propriedade hostname em perInstanceProperties da seguinte forma:

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT: o número de VMs a criar. Tem de ser inferior ou igual ao número de VMs permitidas por NAME_PATTERN. Em alternativa, se usar perInstanceProperties, não tem de especificar COUNT, mas, se o fizer, tem de ser igual ao número de nomes fornecidos.

  • MIN_COUNT: o número mínimo de VMs a criar. A tabela seguinte descreve o comportamento do pedido consoante a forma como define esta flag:

    Valor Descrição
    Não definido O valor predefinido é COUNT. Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT, o pedido falha e não são criadas VMs.
    1 O Compute Engine cria o maior número possível de VMs, até COUNT.
    Superior a 1 e inferior a COUNT O Compute Engine cria, pelo menos, MIN_COUNT VMs até um máximo de COUNT VMs. Se não for possível criar VMs MIN_COUNT, o pedido falha e não são criadas VMs.
  • LOCATION_POLICY: as zonas a incluir ou excluir numa região. Use uma lista de pares de chave-valor, com a zona como chave e a política como valor. Os valores válidos para a política são ALLOW, que é o valor predefinido, e DENY. Segue-se um valor de exemplo para este campo:

    "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 seguinte mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Impõe o posicionamento de VMs numa única zona e dá prioridade à utilização de reservas não usadas. Use esta opção para evitar a saída da rede entre zonas ou para reduzir a latência da rede. Este é o valor predefinido.
    BALANCED Tenta distribuir as VMs uniformemente por todas as zonas da região.
    ANY Permite a distribuição de VMs em várias zonas numa região. Escolhe zonas com recursos disponíveis e que maximizam as reservas zonais não usadas.

Verifique o estado de um pedido de criação de VMs em massa

Quando cria um pedido de mutação, o Compute Engine devolve um operation recurso que pode sondar para obter o estado da operação. Para mais informações, consulte o artigo Processar respostas da API.

Para obter o estado de um pedido de inserção em massa, envie um pedido HTTP GET para o recurso operation:

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

Para obter o estado de um pedido de inserção em massa regional, envie o seguinte pedido:

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto no qual está a criar VMs
  • REGION: a região na qual está a criar VMs
  • ZONE: a zona na qual está a criar 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 estado é um dos seguintes:
    • CREATING: a criação da VM está em curso
    • ROLLING_BACK: o pedido falhou e está a ser revertido
    • DONE: a criação ou a reversão da VM foi concluída com êxito
  • targetVmCount: o número de VMs a criar na zona especificada
  • createdVmCount: o número de VMs já criadas na zona especificada
  • failedToCreateVmCount: o número de VMs cuja criação falhou na zona especificada
  • deletedVmCount: o número de VMs que foram eliminadas como parte da reversão de uma operação com falha

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

O estado da operação de inserção em massa é RUNNING até que o Compute Engine crie com êxito, pelo menos, o número mínimo de VMs e não ocorra mais criação de VMs nem reversão do pedido.

Quando a operação de inserção em massa estiver em curso, deve ver uma resposta semelhante à seguinte:

{
  "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, foi criada uma instância com êxito e a operação está 2% concluída.

A operação devolve o estado 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 do pedido. Após a criação bem-sucedida do número pedido de VMs, recebe uma resposta semelhante à seguinte:

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

Verifique o estado de uma única VM

Para verificar o estado de uma única VM criada a partir de um pedido para criar VMs em massa, use a CLI gcloud ou a API Compute Engine.

gcloud

  1. A partir do Operation devolvido pelo pedido, obtenha o valor da propriedade operationGroupId.

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

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. Obtenha as restantes propriedades da VM através de uma das seguintes opções:

REST

  1. A partir do Operation devolvido pelo pedido, obtenha o valor da propriedade operationGroupId.

  2. Use a propriedade operationGroupId para obter a lista de operações de VM associadas ao pedido regional ou zonal:

  3. Obtenha as restantes propriedades da VM através de uma das seguintes opções:

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

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
      
    • Use o instances.get método 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 instances.aggregatedListmétodo para obter as propriedades das VMs de todas as zonas e regiões, e filtre por uma etiqueta exclusiva das instâncias ou pelos respetivos 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

Os exemplos de pseudocódigo seguintes mostram como personalizar os pedidos de criação de VMs em massa.

Crie VMs em massa numa região a partir de um conjunto de regiões

O pseudocódigo seguinte descreve como criar 1000 VMs numa região a partir de um conjunto de regiões. Quando tenta criar VMs em massa numa região a partir de um conjunto de regiões, o pedido verifica primeiro a capacidade. Se não houver capacidade suficiente, o pedido falha imediatamente e tenta novamente com a região seguinte no conjunto.

  1. Especifique o número de VMs a criar numa zona.

    nTarget = 1000
    
  2. Designar as regiões nas quais se vai tentar criar as VMs.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Itere as regiões e tente criar as VMs em cada região até ter êxito.

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

Crie VMs em massa numa zona num tipo de máquina

O pseudocódigo seguinte descreve como criar várias VMs numa zona num tipo de máquina especificado. Quando tenta criar VMs em massa no mesmo tipo de máquina, o pedido verifica primeiro a disponibilidade desses tipos de máquinas. Se não houver máquinas do tipo de máquina suficientes disponíveis, o pedido falha imediatamente e tenta novamente com o tipo de máquina seguinte.

  1. Especifique o número de VMs a criar e a região na qual as criar.

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

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. Itere o conjunto de tipos de máquinas e tente criar as VMs no tipo de máquina até ter êxito.

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

Crie mais de 5000 VMs numa zona

Quando cria VMs em massa, só pode criar 5000 VMs com cada pedido. O pseudocódigo seguinte descreve como criar mais de 5000 VMs numa zona através do envio de vários pedidos.

  1. Especifique o número de VMs a criar, um contador para acompanhar o número total de VMs criadas, a região na qual criar as VMs e uma variável para armazenar a zona na qual o Compute Engine cria as VMs.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. Emita um pedido inicial para criar 5000 VMs, guarde a zona devolvida pelo pedido e atualize 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 a emitir pedidos para criar até 5000 VMs de cada vez na zona até o Compute Engine criar o número especificado de VMs.

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

Crie VMs em massa e veja o respetivo estado

O procedimento seguinte mostra como criar um grupo de VMs com nomes predefinidos e, em seguida, ver o respetivo estado:

  1. Especifique o número de VMs a criar, a zona na qual as criar e uma estrutura de dados para armazenar os nomes.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. Gere os nomes padronizados para as 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. Obtenha os detalhes das VMs através do instances.listmétodo com um filtro para os nomes das VMs para devolver os detalhes sobre as mesmas.

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

O que se segue?

Depois de criar VMs em massa, faça uma ou ambas as seguintes ações para simplificar a gestão dessas VMs: