Criar instâncias do Compute Engine com base em imagens de máquina


Depois de criar uma imagem de máquina, use-a para fazer cópias da instância de computação de origem. Para mais informações sobre o uso de imagens de máquina, consulte Quando usar uma imagem de máquina.

Uma imagem de máquina contém a maioria das informações e dados necessários para clonar uma instância.

Uma imagem de máquina não pode ser alterada. No entanto, é possível modificar quase todas as propriedades da imagem de máquina ao criar uma instância com base nela.

É possível criar instâncias com base em imagens de máquina usando o console do Google Cloud, a CLI do Google Cloud ou a REST.

Antes de começar

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

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    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 instâncias do Compute Engine com base em imagens de máquina, peça ao administrador para conceder a você o papel do IAM de Administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) na instância de computação ou no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Restrições

As restrições a seguir se aplicam quando você cria instâncias a partir de imagens de máquina:

  • É possível criar no máximo seis instâncias de uma imagem de máquina de origem em 60 minutos. Se você exceder esse limite, a operação de criação da instância falhará e retornará um erro semelhante ao seguinte:

    Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'.
    Too frequent operations from the source resource.
    

    Para criar mais instâncias do que o limite definido (6 instâncias em 60 minutos), crie mais imagens de máquina a partir da instância de origem ou crie imagens de máquina de curta duração usando as novas instâncias. Em seguida, será possível criar o número necessário de instâncias com base nas novas imagens de máquina.

  • Não é possível criar instâncias a partir de imagens de máquina com discos regionais anexados usando o console do Google Cloud. Use a CLI do Google Cloud ou a REST e especifique os parâmetros replicaZones e deviceName para cada disco regional anexado. Para mais informações, consulte Criar uma instância com base em uma imagem de máquina com modificações de propriedades.

Criar uma instância com base em uma imagem de máquina (sem substituição)

Se você quer criar uma instância totalmente baseada na imagem de máquina, sem alterações nas propriedades, use este método.

Console

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. No menu Criar VM usando ..., selecione Imagens de máquina.

  3. Na janela Criar VM usando uma imagem de máquina que aparece, faça o seguinte:

    1. Selecione uma imagem de máquina.

    2. Para criar e iniciar a instância, clique em Criar.

gcloud

Use o comando gcloud compute instances create para criar uma instância a partir de uma imagem de máquina.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --source-machine-image=SOURCE_MACHINE_IMAGE_NAME

Substitua:

  • INSTANCE_NAME: o nome da instância
  • ZONE: a zona da instância.
  • SOURCE_MACHINE_IMAGE_NAME: a imagem de máquina a partir da qual a instância será criada

Exemplo

Por exemplo, use o comando gcloud a seguir para criar uma instância chamada my-instance na zona us-east1-b a partir de uma imagem de máquina chamada my-machine-image.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image

Depois que a instância é criada, a saída é semelhante a esta:

Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING

REST

Na API, crie uma solicitação POST para o método instances.insert. No corpo da solicitação, inclua os parâmetros a seguir:

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

{
  "name": "INSTANCE_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Substitua:

  • PROJECT_ID: o ID do projeto.
  • ZONE: a zona da instância.
  • INSTANCE_NAME: um nome para a instância.
  • SOURCE_MACHINE_IMAGE_URL: o URL completo ou parcial da imagem de máquina que você quer usar para criar a instância. Por exemplo, se você tiver uma imagem de máquina chamada my-machine-image em um projeto chamado myProject. Os seguintes URLs serão válidos:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Criar uma instância com base em uma imagem de máquina com substituições de propriedades

Se você quiser criar uma instância baseada principalmente na imagem de máquina, mas com algumas alterações, será possível usar o comportamento de modificação. Para usar esse comportamento, você especifica atributos para modificar as propriedades atuais da imagem de máquina ao criar a instância.

Ao usar o recurso de modificação, considere as observações a seguir:

  • Não é possível substituir nenhuma propriedade do disco anexado que não seja o nome do disco ao criar uma instância da imagem de máquina.
  • Especifique o parâmetro replicaZones para cada disco regional anexado com o deviceName do disco regional da imagem da máquina.

  • Se a instância de origem (usada para gerar a imagem de máquina) e a nova instância pertencerem ao mesmo projeto e à mesma região, o seguinte será aplicado:

    • A maioria das propriedades da instância de origem e da nova instância serão as mesmas. As propriedades diferentes serão aquelas como os endereços IP temporários que são atribuídos automaticamente.
    • Se a instância de origem ainda existir quando você criar uma nova instância, essa nova instância não poderá usar o mesmo nome e a mesma zona da instância de origem.
  • Se a instância de origem usada para gerar a imagem de máquina e a nova instância pertencerem ao mesmo projeto, mas a regiões diferentes, o seguinte será aplicado:

    • Você precisará modificar todos os recursos zonais e regionais para a nova instância. Por exemplo, se você criar uma instância de uma imagem de máquina, e a instância de origem dessa imagem pertencer a uma região diferente, será necessário modificar recursos regionais, como sub-rede e regras de firewall regionais. No entanto, recursos globais como balanceadores de carga e contas de serviço não precisam de modificação, a menos que você queira modificá-los.

Console

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. No menu Criar VM usando ..., selecione Imagens de máquina.

  3. Na janela Create VM from machine image que aparece, selecione um modelo e clique em Customize.

  4. Opcional: especifique outras opções de configuração. Para mais informações, consulte Opções de configuração durante a criação de instâncias.

  5. Para criar e iniciar a instância, clique em Criar.

gcloud

Use o comando gcloud compute instances create para criar uma instância a partir de uma imagem de máquina e adicionar as propriedades que você quer substituir.

Por exemplo, é possível usar o seguinte comando gcloud para criar uma VM chamada my-instance na zona us-east1-b a partir de uma imagem de máquina chamada my-machine-image. Neste exemplo, as modificações são aplicadas para alterar o tipo de máquina, interromper a política de manutenção do host e configurar um disco permanente regional com o nome regional-disk-0.

gcloud compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image \
    --machine-type=e2-standard-2 \
    --maintenance-policy=TERMINATE \
    --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \
    --create-disk=device-name=regional-disk-0,\
      replica-zones=^:^us-east1-b:us-east1-c,boot=false

REST

Para substituir as propriedades da imagem de máquina durante a criação da instância, crie uma solicitação POST para o método instances.insert. No corpo da solicitação, inclua o parâmetro sourceMachineImage e todas as modificações necessárias. É possível adicionar qualquer propriedade que você normalmente definiria durante a criação da instância. Por exemplo, para substituir o tipo de máquina, sua chamada de API vai incluir o parâmetro machineType.

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

{
  "name": "INSTANCE_NAME",
  "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Substitua:

  • PROJECT_ID: o ID do projeto.
  • ZONE: a zona da instância.
  • INSTANCE_NAME: um nome para a instância.
  • NEW_MACHINE_TYPE: o tipo de máquina que você quer usar para a instância.
  • SOURCE_MACHINE_IMAGE_URL: o URL completo ou parcial da imagem de máquina que você quer usar para criar a instância. Por exemplo, se você tiver uma imagem de máquina chamada my-machine-image em um projeto chamado myProject. Os seguintes URLs serão válidos:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
    • projects/myProject/global/machineImages/my-machine-image
    • global/machineImages/my-machine-image

Comportamento de modificação

O comportamento de modificação na API Compute Engine segue as regras de patch de mesclagem JSON descritas na RFC 7396 (em inglês). Resumidamente, são aplicáveis as seguintes regras:

  • Se você modificar um campo básico, o campo básico correspondente na imagem da máquina será substituído pelo valor de campo básico na solicitação. Os campos básicos incluem parâmetros como machineType e name.
  • Se você modificar um campo repetido, todos os valores repetidos para essa propriedade serão substituídos pelos valores correspondentes fornecidos na solicitação. Geralmente, campos repetidos são propriedades do tipo list. Por exemplo, disks e networkInterfaces são campos repetidos.
  • Se você substituir um nested object, o objeto na imagem da máquina será mesclado com a especificação do objeto correspondente na solicitação. Se um objeto aninhado estiver em um campo repetido, o campo será tratado de acordo com as regras de campos repetidos. Os rótulos são uma exceção a essa regra e são tratados como um campo repetido, mesmo que sejam do tipo object.

Por exemplo, se você quiser criar uma VM a partir de uma imagem de máquina e criar discos regionais com a VM, use uma substituição para os discos para que você possa especificar a opção replicaZones. Como o campo disks é um campo repetido, é preciso especificar a configuração do disco para todos os discos anexados e o disco de inicialização, não apenas os discos regionais.

POST https://compute.googleapis.com/compute/v1/projects/my-proj/zones/us-west1-a/instances
{
  "name": "vm-from-image",
  "sourceMachineImage": "global/machineImages/my-machine-image",
  "disks": [
    {
      "kind": "compute#attachedDisks",
      "boot": true,
      "autoDelete": true,
      "deviceName": "boot-device",
      "initializeParams": {
        "sourceImage": "projects/my-proj/global/images/my-image",
        "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
      }
    },
    {
      "kind": "compute#attachedDisk",
      "boot": false,
      "autoDelete": true,
      "deviceName": "regional-device-0",
      "initializeParams": {
         "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard",
         "replicaZones": [
            "projects/my-proj/zones/us-west1-a",
            "projects/my-proj/zones/us-west1-c"
         ]
      }
    }
  ]
}

Criar uma instância usando uma imagem de máquina de um projeto diferente

Ao criar uma instância usando uma imagem de máquina de um projeto diferente, talvez você não tenha acesso à conta de serviço anexada a esse projeto de origem. Se você quiser criar uma instância de uma imagem de máquina localizada em um projeto diferente, será necessário garantir que você tenha acesso à imagem da máquina e modificar a propriedade da conta de serviço na nova instância.

Se você compartilhar uma imagem de máquina em projetos que usam uma rede VPC compartilhada, especifique explicitamente os detalhes da VPC compartilhada ao criar uma instância com base na imagem de máquina. Por exemplo, ao criar uma instância em um projeto que não é host, forneça os detalhes da VPC compartilhada do projeto host usando as flags --network, --subnet ou --network-interface.

As seções a seguir descrevem como criar uma instância de uma imagem de máquina localizada em um projeto diferente usando a CLI do Google Cloud.

  1. Conceda acesso à imagem de máquina armazenada em um projeto diferente.

    As permissões podem ser concedidas no projeto de origem ou na imagem da máquina. Use o comando gcloud compute machine-images add-iam-policy-binding para conceder as permissões na imagem de máquina.

    gcloud compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \
        --project=MACHINE_IMAGE_PROJECT \
        --member='ACCOUNT_EMAIL' \
        --role='roles/compute.admin'
    

    Substitua:

    • MACHINE_IMAGE_PROJECT: o ID do projeto que contém a imagem de máquina de origem.
    • MACHINE_IMAGE_NAME: o nome da imagem de máquina a que você quer adicionar a vinculação de permissão.
    • ACCOUNT_EMAIL: o endereço de e-mail da serviceAccount ou do user que está criando a instância. Verifique se o e-mail está formatado para incluir o prefixo necessário. O prefixo precisa ser um dos seguintes:

      • user: especifique isso se o endereço de e-mail estiver associado a uma conta de usuário. Por exemplo, user:user@example.com.
      • serviceAccount: especifique isso se o endereço de e-mail estiver associado a uma conta de serviço. Por exemplo, serviceAccount:123456789000-compute@developer.gserviceaccount.com.

    Exemplo

    Por exemplo, para adicionar uma vinculação compute.admin à imagem de máquina chamada my-machine-image ao e-mail da conta de serviço 123456789000-compute@developer.gserviceaccount.com, use o seguinte comando da gcloud CLI:

    gcloud compute machine-images add-iam-policy-binding my-machine-image \
        --project=machine-image-project \
        --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \
        --role='roles/compute.admin'
    
  2. Conceda ao usuário que executa o comando gcloud compute instances create o papel "Usuário da conta de serviço" (roles/iam.serviceAccountUser) na conta de serviço associada à imagem da máquina.

  3. Use o comando gcloud compute instances create para criar uma instância a partir de uma imagem de máquina.

    gcloud compute instances create INSTANCE_NAME \
        --project=INSTANCE_PROJECT_ID \
        --zone=ZONE \
        --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --subnet=SUBNET
    

    Substitua:

    • INSTANCE_PROJECT_ID: o ID do projeto em que você quer criar a instância.
    • INSTANCE_NAME: um nome para a instância
    • ZONE: a zona da instância.
    • MACHINE_IMAGE_PROJECT: o ID do projeto em que a imagem da máquina está localizada
    • MACHINE_IMAGE_NAME: a imagem de máquina a partir da qual a instância será criada
    • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço que você quer anexar à instância.
    • SUBNET: se a sub-rede e a instância estiverem no mesmo projeto, substitua SUBNET pelo nome de uma sub-rede que esteja na mesma região da instância

      Para especificar uma sub-rede em uma rede VPC compartilhada, substitua SUBNET por uma string no seguinte formato:

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      

      Substitua:

      • HOST_PROJECT_ID: o ID do projeto do projeto host da VPC compartilhada
      • REGION: a região da sub-rede
      • SUBNET_NAME: o nome da sub-rede

      Exemplo

      Por exemplo, o comando a seguir cria uma VM chamada my-instance em vm-project, na zona us-east1-b, de uma imagem de máquina chamada my-machine-image.

      A sinalização --service-account especifica a conta de serviço que você quer anexar à VM recém-criada. Se você não fornecer essa sinalização, a conta de serviço de origem não poderá ser compartilhada entre os projetos e a operação falhará.

      gcloud compute instances create my-instance \
       --project=vm-project \
       --zone=us-east1-b \
       --source-machine-image=projects/machine-image-project/global/machineImages/my-machine-image \
       --service-account=000123456789-compute@developer.gserviceaccount.com
      

      Após a criação da VM, a saída será assim:

      Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance].
      NAME               ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
      my-instance        us-east1-b  e2-standard-2               192.0.2.1   203.224.0.113  RUNNING
      

A seguir