Crie VMs em massa


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

Para obter mais detalhes e limitações associadas, consulte Sobre a criação em massa de VMs . Se você quiser criar instâncias com GPUs anexadas, consulte Criar VMs de GPU em massa .

Antes de começar

Funções obrigatórias

Para obter as permissões necessárias para criar VMs em massa, peça ao administrador para conceder a você a função do IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) no projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Esta função predefinida contém as permissões necessárias para criar VMs em massa. Para ver 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
  • 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 atribuir uma rede legada à VM: compute.networks.use no projeto
  • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Para atribuir um endereço IP externo à VM ao usar uma rede legada: compute.networks.useExternalIp no projeto
  • Para especificar uma sub-rede para sua VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Para atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Para definir metadados de instância de VM para a VM: compute.instances.setMetadata no projeto
  • Para definir tags para a VM: compute.instances.setTags na VM
  • Para definir rótulos 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 somente leitura ou leitura-gravação: compute.disks.use no disco
  • Para anexar um disco existente no modo somente leitura: compute.disks.useReadOnly no disco

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Crie VMs em massa em uma região

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

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

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

  • NAME_PATTERN : o padrão de nome para as VMs. Use uma sequência de caracteres 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é o número de VMs especificado por --count , que deve 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 a partir de solicitações anteriores.

  • PREDEFINED_NAMES : uma lista de nomes predefinidos para as VMs criarem. Se estiver usando esse sinalizador e especificando COUNT , COUNT deverá ser igual ao número de nomes fornecidos.

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

  • COUNT : o número de VMs a serem criadas. Deve ser menor ou igual ao número de VMs permitidas por NAME_PATTERN . Ou, se estiver usando --predefined-names , você não precisa especificar COUNT , mas se o fizer, deverá 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ê define esse sinalizador:

    Valor Descrição
    Não definido O valor padrão é COUNT . Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT , a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o maior número possível de VMs, 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 MIN_COUNT VMs não puderem ser criadas, 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 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 padrão, e deny . Veja a seguir um valor de exemplo para esse sinalizador:

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

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VM em uma única zona e prioriza a utilização de reservas não utilizadas. Use isto para evitar saída de rede entre zonas ou para reduzir a latência da rede. Este é o valor padrão.
    BALANCED Tentativas de distribuir VMs uniformemente em todas as zonas da região.
    ANY Permite a distribuição de VMs em diversas zonas de uma região. Escolhe zonas que possuem recursos disponíveis e que maximizam as reservas zonais não utilizadas.

DESCANSAR

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 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 isto ou perInstanceProperties . Use uma sequência de caracteres 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é o número de VMs especificado por --count , que deve 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 a partir de solicitações anteriores.

  • PREDEFINED_NAME_1 , PREDEFINED_NAME_2 , ...: uma lista de nomes predefinidos para as VMs criarem. Especifique this ou namePattern . Se estiver usando esse sinalizador e especificando COUNT , COUNT deverá ser igual ao número de nomes fornecidos.

  • COUNT : o número de VMs a serem criadas. Deve ser menor ou igual ao número de VMs permitidas por NAME_PATTERN . Ou, se estiver usando perInstanceProperties , você não precisa especificar COUNT , mas se o fizer, deverá 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ê define esse sinalizador:

    Valor Descrição
    Não definido O valor padrão é COUNT . Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT , a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o maior número possível de VMs, 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 MIN_COUNT VMs não puderem ser criadas, 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 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 padrão, e DENY . Veja a seguir 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 a seguir mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VM em uma única zona e prioriza a utilização de reservas não utilizadas. Use isto para evitar saída de rede entre zonas ou para reduzir a latência da rede. Este é o valor padrão.
    BALANCED Tentativas de distribuir VMs uniformemente em todas as zonas da região.
    ANY Permite a distribuição de VMs em diversas zonas de uma região. Escolhe zonas que possuem recursos disponíveis e que maximizam as reservas zonais não utilizadas.

Crie VMs em massa em uma zona

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

gcloud

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

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 caracteres 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é o número de VMs especificado por --count , que deve 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 a partir de solicitações anteriores.

  • PREDEFINED_NAMES : uma lista de nomes predefinidos para as VMs criarem. Se estiver usando esse sinalizador e especificando COUNT , COUNT deverá ser igual ao número de nomes fornecidos.

  • ZONE : a zona na qual criar as VMs.

  • COUNT : o número de VMs a serem criadas. Deve ser menor ou igual ao número de VMs permitidas por NAME_PATTERN . Ou, se estiver usando --predefined-names , você não precisa especificar COUNT , mas se o fizer, deverá 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ê define esse sinalizador:

    Valor Descrição
    Não definido O valor padrão é COUNT . Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT , a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o maior número possível de VMs, 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 MIN_COUNT VMs não puderem ser criadas, a solicitação falhará e nenhuma VM será criada.

DESCANSAR

Para criar VMs em massa em uma zona, use o método instances.bulkInsert a seguir.

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 isto ou perInstanceProperties . Use uma sequência de caracteres 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é o número de VMs especificado por --count , que deve 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 a partir de solicitações anteriores.

  • PREDEFINED_NAME_1 , PREDEFINED_NAME_2 , ...: uma lista de nomes predefinidos para as VMs criarem. Especifique this ou namePattern . Se estiver usando esse sinalizador e especificando COUNT , COUNT deverá ser igual ao número de nomes fornecidos.

  • COUNT : o número de VMs a serem criadas. Deve ser menor ou igual ao número de VMs permitidas por NAME_PATTERN . Ou, se estiver usando perInstanceProperties , você não precisa especificar COUNT , mas se o fizer, deverá 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ê define esse sinalizador:

    Valor Descrição
    Não definido O valor padrão é COUNT . Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT , a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o maior número possível de VMs, 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 MIN_COUNT VMs não puderem ser criadas, a solicitação falhará e nenhuma VM será criada.

Crie 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 CLI gcloud ou a API Compute Engine.

Você deve configurar manualmente o registro DNS para seu nome de host personalizado. Para obter mais informações, consulte limitações .

Se você não especificar um nome de host, o Compute Engine definirá o nome de host para VMs como um dos seguintes:

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

Para obter 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 seguinte 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 ]

Substitua o seguinte:

  • NAME_PATTERN : o padrão de nome para as VMs. Use uma sequência de caracteres 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é o número de VMs especificado por --count , que deve 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 a partir de solicitações anteriores.

  • PREDEFINED_NAMES : uma lista de nomes predefinidos para as VMs criarem. Se estiver usando esse sinalizador e especificando COUNT , COUNT deverá ser igual ao número de nomes fornecidos.

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

  • REGION : a zona na qual criar as VMs.

  • COUNT : o número de VMs a serem criadas. Deve ser menor ou igual ao número de VMs permitidas por NAME_PATTERN . Ou, se estiver usando --predefined-names , você não precisa especificar COUNT , mas se o fizer, deverá 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ê define esse sinalizador:

    Valor Descrição
    Não definido O valor padrão é COUNT . Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT , a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o maior número possível de VMs, 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 MIN_COUNT VMs não puderem ser criadas, 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 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 padrão, e DENY . Veja a seguir 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 a seguir mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VM em uma única zona e prioriza a utilização de reservas não utilizadas. Use isto para evitar saída de rede entre zonas ou para reduzir a latência da rede. Este é o valor padrão.
    BALANCED Tentativas de distribuir VMs uniformemente em todas as zonas da região.
    ANY Permite a distribuição de VMs em diversas zonas de uma região. Escolhe zonas que possuem recursos disponíveis e que maximizam as reservas zonais não utilizadas.

DESCANSAR

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 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 isto ou perInstanceProperties . Use uma sequência de caracteres 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é o número de VMs especificado por --count , que deve 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 a partir de solicitações anteriores.

  • PREDEFINED_NAME_1 , PREDEFINED_NAME_2 , ...: uma lista de nomes predefinidos para as VMs criarem. Especifique this ou namePattern . Se estiver usando esse sinalizador e especificando COUNT , COUNT deverá ser igual ao número de nomes fornecidos.

  • HOSTNAME_1 , HOSTNAME_2 , ...: nomes de host de domínio totalmente qualificados que você deseja atribuir às VMs. Os nomes de host personalizados devem estar em conformidade com os requisitos da 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 forma:

    {
    ...
    "perInstanceProperties": {
    "vm-1": { "hostname": "my-host1234.example.com" },
    "vm-2": { "hostname": "test.example.com" },
    ...
    },
    
  • COUNT : o número de VMs a serem criadas. Deve ser menor ou igual ao número de VMs permitidas por NAME_PATTERN . Ou, se estiver usando perInstanceProperties , você não precisa especificar COUNT , mas se o fizer, deverá 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ê define esse sinalizador:

    Valor Descrição
    Não definido O valor padrão é COUNT . Se o Compute Engine não conseguir criar o número de VMs especificado por COUNT , a solicitação falhará e nenhuma VM será criada.
    1 O Compute Engine cria o maior número possível de VMs, 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 MIN_COUNT VMs não puderem ser criadas, 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 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 padrão, e DENY . Veja a seguir 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 a seguir mostra os valores válidos para este campo:

    Valor Descrição
    ANY_SINGLE_ZONE Aplica a colocação de VM em uma única zona e prioriza a utilização de reservas não utilizadas. Use isto para evitar saída de rede entre zonas ou para reduzir a latência da rede. Este é o valor padrão.
    BALANCED Tentativas de distribuir VMs uniformemente em todas as zonas da região.
    ANY Permite a distribuição de VMs em diversas zonas de uma região. Escolhe zonas que possuem recursos disponíveis e que maximizam as reservas zonais não utilizadas.

Verifique 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 você pode pesquisar para obter o status da operação. Para obter mais informações, consulte Tratamento de respostas de API .

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

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

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

  • PROJECT_ID : o ID do projeto no qual você está criando VMs
  • REGION : a região na qual você está criando VMs
  • ZONE : a zona na qual 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 está sendo revertida
    • DONE : a criação ou reversão da VM foi concluída com êxito
  • 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 será RUNNING até que o Compute Engine crie pelo menos o número mínimo de VMs e não ocorra mais nenhuma criação de VM 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 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 bem-sucedida 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 obter mais informações, consulte a documentação do objeto instancesBulkInsertOperationMetadata .

Verifique o status de uma única VM

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

gcloud

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

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

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

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

      gcloud compute instances describe VM_NAME
      
    • Use o comando gcloud compute instances list com um filtro que inclui 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 obter as propriedades das VMs de todas as zonas e regiões e filtrar por um rótulo exclusivo para as instâncias ou por seus nomes:

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

DESCANSAR

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

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

    • Se você enviou uma solicitação regional, para pesquisar todas as operações e todas as zonas do projeto, use o método globalOperations.aggregatedList e inclua a propriedade operationGroupId como 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. Obtenha o restante das propriedades da VM seguindo um destes procedimentos:

    • Na lista de operações, targetLink representa o caminho da VM. Use o método instances.get com este caminho como 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 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 obter as propriedades das VMs de todas as zonas e regiões e filtrar por um rótulo exclusivo para as 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

Os exemplos de pseudocódigo a seguir mostram como personalizar solicitações para criação de VMs em massa.

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

O pseudocódigo a seguir descreve como criar 1.000 VMs em uma região a partir de um conjunto de regiões. Ao tentar criar VMs em massa numa região a partir de um conjunto de regiões, o pedido primeiro verifica a capacidade. Se não houver capacidade suficiente, a solicitação falha imediatamente e tenta novamente com a próxima região do conjunto.

  1. Especifique o número de VMs a serem criadas em uma zona.

    nTarget = 1000
    
  2. Designe as regiões nas quais tentar criar as VMs.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. Itere pelas regiões e tente criar as VMs em cada região até obter 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

O pseudocódigo a seguir 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 de máquina. Se não houver quantidade suficiente do tipo de máquina disponível, a solicitação falhará imediatamente e tentará novamente com o próximo tipo de máquina.

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

    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 pelo conjunto de tipos de máquina e tente criar as VMs no tipo de máquina até obter ê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 5.000 VMs em uma zona

Ao criar VMs em massa, você só pode 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 diversas solicitações.

  1. Especifique o número de VMs a serem criadas, um contador para monitorar o número total de VMs criadas, a região na qual 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, salve a zona retornada pela solicitação 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 emitindo 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
    

Crie VMs em massa e visualize seu status

O procedimento a seguir mostra como criar um grupo de VMs com nomes predefinidos e, em seguida, visualizar seu status:

  1. Especifique o número de VMs a serem criadas, a zona na qual criá-las 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 à 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 usando o método instances.list com um filtro para os nomes das VMs sobre as quais retornar os detalhes.

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

O que vem a seguir

Depois de criar VMs em massa, siga um ou ambos os procedimentos a seguir para simplificar o gerenciamento dessas VMs: