Criar instâncias de VM com base em imagens de máquina

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Depois de criar uma imagem de máquina, use-a para fazer cópias da instância de VM 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 Google Cloud CLI ou a API Compute Engine.

Antes de começar

Criar uma VM a partir de uma imagem de máquina (sem substituição)

Se você quiser criar uma VM 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. Clique em Nova instância de VM a partir da imagem de máquina.

  3. Selecione a imagem de máquina e clique em Continuar.

  4. Opcional: personalize os detalhes da VM.

  5. Clique em Criar.

gcloud

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

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

Substitua:

  • VM_NAME: o nome da VM a ser criada.
  • ZONE: a zona para a VM.
  • SOURCE_MACHINE_IMAGE_NAME: a imagem de máquina a partir da qual a VM será criada.

Exemplo

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.

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

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

API

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": "VM_NAME",
  "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL"
}

Substitua:

  • PROJECT_ID: o ID do projeto.
  • ZONE: a zona para a VM.
  • VM_NAME: o nome da VM a ser criada.
  • SOURCE_MACHINE_IMAGE_URL: o URL completo ou parcial da imagem de máquina que você quer usar para criar a VM. 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 VM a partir de uma imagem de máquina (com substituições de propriedades)

Se você quiser criar uma VM baseada principalmente na imagem de máquina, mas com algumas alterações, será possível usar o comportamento de substituiçã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 qualquer propriedade do disco anexado que não seja o nome do disco ao criar uma VM a partir da imagem de máquina.

  • Se a VM de origem usada para gerar a imagem de máquina e a nova VM pertencer ao mesmo projeto e à mesma região, o seguinte será aplicado:

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

    • Você precisará substituir todos os recursos zonais e regionais da nova VM. Por exemplo, se você criar uma instância de VM com base em 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. Clique em Nova instância de VM a partir da imagem de máquina.

  3. Selecione a imagem de máquina e clique em Continuar.

  4. Opcional: personalize os detalhes da VM.

  5. Clique em Criar.

    Para mais detalhes sobre configuração, consulte Criar uma instância de VM a partir de uma imagem.

gcloud

Use o comando gcloud beta 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 substituições são aplicadas para alterar o tipo de máquina e interromper a política de manutenção do host.

gcloud beta compute instances create my-instance \
    --zone=us-east1-b \
    --source-machine-image=my-machine-image \
    --machine-type=e2-standard-2 \
    --maintenance-policy=TERMINATE

API

Para substituir as propriedades da imagem de máquina durante a criação da VM, use a API instances.insert() e forneça os campos que você quer substituir no corpo da solicitação.

Na API, 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ê costuma definir durante a criação da instância. Por exemplo, para alterar o tipo de máquina, sua chamada de API incluirá o parâmetro machineType.

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

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

Substitua:

  • PROJECT_ID: o ID do projeto.
  • ZONE: a zona para a VM.
  • VM_NAME: o nome da VM a ser criada.
  • NEW_MACHINE_TYPE: o tipo de máquina que você quer usar para a VM.
  • 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 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.

Criar uma VM usando uma imagem de máquina de um projeto diferente

Ao criar uma VM 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 VM 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 VM.

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

  1. Conceda acesso às imagens de máquina armazenadas 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 de serviceAccount ou user que está criando a VM. 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:

    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 beta compute instances create para criar uma VM a partir de uma imagem de máquina.

    gcloud beta compute instances create VM_NAME \
        --project=VM_PROJECT_ID \
        --zone=ZONE \
        --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \
        --service-account=SERVICE_ACCOUNT_EMAIL
    

    Substitua:

    • VM_PROJECT_ID: o ID do projeto em que a VM será criada.
    • VM_NAME: o nome da VM a ser criada.
    • ZONE: a zona para a VM.
    • 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 VM será criada.
    • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço que você quer anexar à VM.

      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 beta 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