Crie instâncias do Compute Engine a partir de imagens de máquinas

Depois de criar uma imagem da máquina, pode usá-la para fazer cópias da instância de computação de origem. Para mais informações sobre as utilizações de imagens de máquinas, consulte o artigo 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 é alterável. No entanto, pode substituir quase todas as propriedades da imagem da máquina quando cria uma instância a partir da imagem da máquina.

Pode criar instâncias a partir de imagens de máquinas através da Google Cloud consola, da CLI Google Cloud ou da REST.

Antes de começar

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

    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. 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 instâncias do Compute Engine a partir de imagens de máquinas, peça ao seu administrador para lhe conceder a função IAM Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) na instância de computação ou 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.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Restrições

Aplicam-se as seguintes restrições quando cria instâncias a partir de imagens da máquina:

  • Pode criar, no máximo, 6 instâncias a partir de uma imagem de máquina de origem em 60 minutos. Se exceder este limite, a operação de criação da instância falha e devolve 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 imagens da máquina adicionais a partir da instância de origem ou crie imagens da máquina de curta duração a partir das novas instâncias. Em seguida, pode criar o número necessário de instâncias a partir das novas imagens de máquinas.

  • Não pode criar instâncias a partir de imagens de máquinas com discos regionais anexados através da consola. Google Cloud Use a CLI Google Cloud ou a API REST e especifique os parâmetros replicaZones e deviceName para cada disco regional anexado. Para mais informações, consulte o artigo Crie uma instância a partir de uma imagem de máquina com substituições de propriedades.

Crie uma instância a partir de uma imagem da máquina (sem substituição)

Se quiser criar uma instância totalmente baseada na imagem da máquina sem alterações às propriedades, use este método.

Consola

  1. Na Google Cloud consola, aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. No menu Criar VM a partir de…, selecione Imagens da máquina.

  3. Na janela Criar VM a partir de imagem da máquina apresentada, 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 da máquina.

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

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância
  • ZONE: a zona da instância
  • SOURCE_MACHINE_IMAGE_NAME: a imagem da máquina a partir da qual criar a instância

Exemplo

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

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

Depois de criar a instância, o resultado é semelhante ao seguinte:

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 um pedido POST para o método instances.insert. No corpo do pedido, inclua os seguintes parâmetros:

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

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

Substitua o seguinte:

  • PROJECT_ID: o seu 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 da máquina que quer usar para criar a instância. Por exemplo, se tiver uma imagem de máquina denominada my-machine-image num projeto denominado myProject. Os seguintes URLs sã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

Crie uma instância a partir de uma imagem da máquina com substituições de propriedades

Se quiser criar uma instância baseada principalmente na imagem da máquina, mas com algumas alterações, pode usar o comportamento de substituição. Para usar o comportamento de substituição, transmite atributos para substituir as propriedades da imagem da máquina existentes quando cria a instância.

Quando usar a funcionalidade de substituição, tenha em consideração as seguintes notas:

  • Não pode substituir nenhuma propriedade do disco anexado, exceto o nome do disco, ao criar uma instância a partir da imagem da máquina.
  • Tem de especificar o parâmetro replicaZones para cada disco regional anexado, juntamente com o deviceName do disco regional da imagem da máquina.

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

    • A maioria das propriedades da instância de origem e da nova instância são iguais. As propriedades que diferem são, por exemplo, os endereços IP efémeros que são atribuídos automaticamente.
    • Se a instância de origem ainda existir quando criar uma nova instância, a nova instância não pode usar o mesmo nome nem a mesma zona que a instância de origem.
  • Se a instância de origem usada para gerar a imagem da máquina e a nova instância pertencerem ao mesmo projeto, mas a regiões diferentes, aplica-se o seguinte:

    • Tem de substituir todos os recursos zonais e regionais da nova instância. Por exemplo, se criar uma instância a partir de uma imagem de máquina cuja instância de origem pertencia a uma região diferente, tem de substituir os recursos regionais, como a sub-rede e as regras de firewall regionais. No entanto, os recursos globais, como os balanceadores de carga e as contas de serviço, não precisam de uma substituição, a menos que queira modificá-los.

Consola

  1. Na Google Cloud consola, aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. No menu Criar VM a partir de…, selecione Imagens da máquina.

  3. Na janela Criar VM a partir de imagem de máquina apresentada, selecione um modelo e, de seguida, clique em Personalizar.

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

  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 da máquina e adicionar as propriedades que quer substituir.

Por exemplo, pode usar o seguinte comando gcloud para criar uma VM denominada my-instance na zona us-east1-b a partir de uma imagem da máquina denominada my-machine-image. Neste exemplo, as substituições são aplicadas para alterar o tipo de máquina, parar a política de manutenção do anfitrião e configurar um disco persistente 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 da máquina durante a criação da instância, crie um pedido POST para o método instances.insert. No corpo do pedido, inclua o parâmetro sourceMachineImage e quaisquer substituições de que necessite. Pode adicionar qualquer propriedade que normalmente definiria durante a criação de instâncias. Por exemplo, para substituir o tipo de máquina, a chamada API incluiria 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 o seguinte:

  • 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 quer usar para a instância.
  • SOURCE_MACHINE_IMAGE_URL: o URL completo ou parcial da imagem da máquina que quer usar para criar a instância. Por exemplo, se tiver uma imagem de máquina denominada my-machine-image num projeto denominado myProject. Os seguintes URLs sã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 substituição

O comportamento de substituição na API Compute Engine segue as regras de patch de união JSON, descritas na RFC 7396. Em resumo, aplicam-se as seguintes regras:

  • Se substituir um campo básico, o campo básico correspondente na imagem da máquina é substituído pelo valor do campo básico no pedido. Os campos básicos incluem parâmetros como machineType e name.
  • Se substituir um campo repetido, todos os valores repetidos dessa propriedade são substituídos pelos valores correspondentes fornecidos no pedido. Geralmente, os campos repetidos são propriedades do tipo list. Por exemplo, disks e networkInterfaces são campos repetidos.
  • Se substituir um nested object, o objeto na imagem da máquina é unido à especificação do objeto correspondente no pedido. Tenha em atenção que, se um objeto aninhado estiver num campo repetido, o campo é tratado de acordo com as regras para campos repetidos. As etiquetas são uma exceção a esta regra e são tratadas como um campo repetido, mesmo que sejam do tipo object.

Por exemplo, se quiser criar uma VM a partir de uma imagem da máquina e criar discos regionais com a VM, use uma substituição para os discos para poder especificar a opção replicaZones. Uma vez que o campo disks é um campo repetido, tem de especificar a configuração do disco para todos os discos anexados e o disco de arranque, e 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"
         ]
      }
    }
  ]
}

Crie uma instância com uma imagem da máquina de um projeto diferente

Quando cria uma instância através de uma imagem da máquina de um projeto diferente, pode não ter acesso à conta de serviço anexada a esse projeto de origem. Se quiser criar uma instância a partir de uma imagem de máquina localizada num projeto diferente, tem de garantir que tem acesso à imagem de máquina e substituir a propriedade da conta de serviço na nova instância.

Se partilhar uma imagem de máquina entre projetos que usam uma rede de VPC partilhada, tem de especificar explicitamente os detalhes da VPC partilhada quando criar uma instância a partir da imagem de máquina. Por exemplo, quando cria uma instância num projeto que não é o projeto anfitrião, faculte os detalhes da VPC partilhada do projeto anfitrião através das flags --network, --subnet ou --network-interface.

As secções seguintes descrevem como criar uma instância a partir de uma imagem da máquina localizada num projeto diferente através da Google Cloud CLI.

  1. Conceder acesso à imagem da máquina armazenada num projeto diferente.

    As autorizaçõ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 autorizações na imagem da 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 o seguinte:

    • MACHINE_IMAGE_PROJECT: o ID do projeto do projeto que contém a imagem da máquina de origem.
    • MACHINE_IMAGE_NAME: o nome da imagem da máquina à qual quer adicionar a associação de autorização.
    • ACCOUNT_EMAIL: o endereço de email do serviceAccount ou user que está a criar a instância. Certifique-se de que o email está formatado para incluir o prefixo obrigatório. O prefixo tem de ser um dos seguintes:

      • user: especifique isto se o endereço de email estiver associado a uma conta de utilizador. Por exemplo, user:user@example.com.
      • serviceAccount: especifique esta opção se o endereço de email estiver associado a uma conta de serviço. Por exemplo, serviceAccount:123456789000-compute@developer.gserviceaccount.com.

    Exemplo

    Por exemplo, para adicionar uma associação compute.admin à imagem da máquina denominada my-machine-image ao email da conta de serviço 123456789000-compute@developer.gserviceaccount.com, use o seguinte comando 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 utilizador que executa o comando gcloud compute instances create a função de utilizador 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 da 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 o seguinte:

    • INSTANCE_PROJECT_ID: o ID do projeto para o projeto no qual 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 do projeto onde a imagem da máquina está localizada
    • MACHINE_IMAGE_NAME: a imagem da máquina a partir da qual criar a instância
    • SERVICE_ACCOUNT_EMAIL: o endereço de email da conta de serviço que quer anexar à sua 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 que a instância

      Para especificar uma sub-rede numa rede de VPC partilhada, substitua SUBNET por uma string no seguinte formato:

      projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
      

      Substitua o seguinte:

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

      Exemplo

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

      A flag --service-account especifica a conta de serviço que quer anexar à VM recém-criada. Se não fornecer este indicador, não é possível partilhar a conta de serviço de origem entre os dois projetos e a operação falha.

      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
      

      Depois de criar a VM, o resultado é semelhante ao seguinte:

      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
      

O que se segue?