Como criar modelos de instâncias

Nesta página, você aprenderá a criar e gerenciar modelos de instância. Com esses modelos, é possível especificar o tipo de máquina, a imagem do disco de inicialização, a rede e outras propriedades de VM que você quer usar ao criar instâncias de máquina virtual (VM).

Use os modelos para criar VMs em um grupo de instâncias gerenciadas (MIG, na sigla em inglês) ou para criar VMs individuais.

Antes de começar

Limitações

A VPC compartilhada em interfaces diferentes de nic0 para modelos de instância é compatível com a ferramenta gcloud e a API, mas não no Console do Cloud.

Como criar um novo modelo de instância

A maioria das propriedades de VM que você pode especificar em uma solicitação para criar uma instância de VM individual também pode ser especificada para um modelo de instância, incluindo metadados de VM, scripts de inicialização, discos permanentes, contas de serviço e assim por diante. Especifique o tipo de máquina, o disco de inicialização e a rede.

Crie um modelo de instância por meio do Console do Google Cloud, da ferramenta de linha de comando gcloud ou da API.

Console

  1. No Console do Cloud, acesse a página Modelos de instância.

    Acesse "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Digite valores para os campos a seguir ou aceite os valores padrão. Os valores padrão mudam com base na família de máquinas que você seleciona.

    • Tipo de máquina
    • Image
    • Disco de inicialização
    • Rede VPC
    • Endereço IP
  4. Opcional: se você escolher uma imagem compatível com a VM protegida, altere as configurações de VM protegida da VM:

    1. Em Gerenciamento, segurança, discos, rede, locatário único, clique na guia Segurança.
    2. Se você quiser desativar a Inicialização segura, desmarque a caixa de seleção Ativar a Inicialização segura. A Inicialização segura ajuda a proteger as instâncias de VM de malware e rootkits nos níveis da inicialização e do kernel. Para mais informações, consulte Inicialização segura.
    3. Se quiser desativar o módulo da plataforma virtual confiável (vTPM, na sigla em inglês), desmarque a caixa de seleção Ativar vTPM. O vTPM permite a Inicialização medida, que valida a integridade da VM antes e durante a inicialização. Para mais informações, consulte Módulo da plataforma virtual confiável (vTPM).

    4. Se você quiser desativar o monitoramento de integridade, desmarque a caixa de seleção Ativar monitoramento de integridade. Com o monitoramento de integridade, você consegue monitorar a integridade da inicialização das instâncias de VM protegidas usando o Cloud Monitoring. Para mais informações, consulte Monitoramento de integridade.

  5. Opcional: em Gerenciamento, segurança, discos, rede, locatário único, clique nas guias para personalizar ainda mais o modelo. Por exemplo, adicione até 15 discos secundários que não sejam de inicialização.

  6. Opcional: clique em REST equivalente para visualizar o corpo da solicitação REST, que inclui a representação JSON do modelo de instância.

  7. Clique em Criar para criar o modelo.

gcloud

Em gcloud compute, crie um modelo de instância usando o comando instance-templates create.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME

Substitua INSTANCE_TEMPLATE_NAME por um nome para o modelo de instância.

Se você não fornecer as configurações do modelo explicitamente, o gcloud compute usará os seguintes valores padrão:

  • Tipo de máquina: o tipo de máquina, por exemplo, n1-standard-1
  • Imagem: a imagem mais recente do Debian
  • Disco de inicialização: um novo disco de inicialização padrão nomeado conforme a VM
  • Rede: a rede VPC padrão
  • Endereço IP: um endereço IP externo temporário

Também é possível definir explicitamente essas configurações. Por exemplo:

gcloud compute instance-templates create example-template-custom \
    --machine-type=e2-standard-4 \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --boot-disk-size=250GB

é possível adicionar até 15 discos secundários que não sejam de inicialização. Especifique a sinalização --create-disk para cada disco secundário criado. Para criar discos secundários a partir de uma imagem pública ou de banco de imagem, especifique as propriedades image e image-project na sinalização --create-disk. Para criar um disco vazio, não inclua essas propriedades. Se quiser, inclua as propriedades size e type do disco.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --create-disk= \
        {--image=DISK_IMAGE | --image-family=DISK_IMAGE_FAMILY}, \
        image-project=DISK_IMAGE_PROJECT, \
        size=SIZE_GB

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do novo modelo

  • DISK_IMAGE ou DISK_IMAGE_FAMILY: especifique uma das seguintes opções:
    • DISK_IMAGE: o nome da imagem que você quer usar como disco que não é de inicialização
    • DISK_IMAGE_FAMILY: uma família de imagens a ser usada como disco que não é de inicialização

      Para mais informações sobre famílias de imagens, consulte práticas recomendadas ao usar famílias de imagens no Compute Engine.

  • Para discos vazios, não especifique a propriedade image.

  • DISK_IMAGE_PROJECT: o projeto que contém a imagem

    Para discos vazios, não especifique a propriedade image-project. Para mais informações sobre imagens públicas, consulte Imagens públicas.

  • SIZE_GB: o tamanho do disco secundário.

Se tiver escolhido uma imagem compatível com a VM protegida, você poderá alterar as configurações de VM protegida da instância usando uma das sinalizações a seguir:

  • --no-shielded-secure-boot: desativar a inicialização segura

    A inicialização segura ajuda a proteger as instâncias de VM contra malware e rootkits nos níveis de inicialização e kernel. Para mais informações, consulte Inicialização segura.

  • --no-shielded-vtpm: desativar o módulo da plataforma virtual confiável (vTPM, na sigla em inglês)

    O vTPM permite a Inicialização medida, que valida a integridade da VM antes e durante a inicialização. Para mais informações, consulte Módulo da plataforma virtual confiável (vTPM).

  • --no-shielded-integrity-monitoring: desativar o monitoramento de integridade

    O monitoramento de integridade permite monitorar a integridade da inicialização das instâncias de VM protegidas usando o Cloud Monitoring. Para mais informações, consulte Monitoramento de integridade.

Para uma lista de todos os subcomandos e sinalizações disponíveis, consulte a referência de instance-templates.

Um modelo com as configurações padrão é semelhante a este:

gcloud compute instance-templates describe example-template
creationTimestamp: '2019-09-10T16:18:32.042-07:00'
description: ''
id: '6057583701980539406'
kind: compute#instanceTemplate
name: example-template
properties:
  canIpForward: false
  disks:
  - autoDelete: true
    boot: true
    initializeParams:
      sourceImage: https://compute.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-10
    kind: compute#attachedDisk
    mode: READ_WRITE
    type: PERSISTENT
  machineType: e2-standard-2
  networkInterfaces:
  - accessConfigs:
    - kind: compute#accessConfig
      name: external-nat
      type: ONE_TO_ONE_NAT
    network: https://compute.googleapis.com/compute/v1/projects/myproject/global/networks/default
  scheduling:
    automaticRestart: true
    onHostMaintenance: MIGRATE
  serviceAccounts:
  - email: default
    scopes:
    - https://www.googleapis.com/auth/devstorage.read_only
selfLink: https://compute.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template

API

Para criar um modelo de instância, faça uma solicitação POST para o método instanceTemplates.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

Substitua PROJECT_ID pelo ID do projeto.

No corpo da solicitação, forneça as propriedades do modelo:

{
  "name": "INSTANCE_TEMPLATE_NAME"
  "properties": {
    "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs":
        [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks":
    [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
  }
}

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância
  • ZONE: a zona em que as VMs estão localizadas.
  • MACHINE_TYPE: o tipo de máquina das VMs

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem

    Para mais informações sobre imagens públicas, consulte Imagens públicas.

  • IMAGE ou IMAGE_FAMILY: especifique uma das seguintes opções:
    • IMAGE: uma versão específica da imagem

      Por exemplo, "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

    • IMAGE_FAMILY: uma família de imagens

      Isso cria a VM a partir da imagem do SO mais recente e não obsoleta. Por exemplo, se você especificar "sourceImage": "projects/debian-cloud/global/images/family/debian-10", o Compute Engine criará uma VM da versão mais recente da imagem do SO na família de imagens Debian 10.

      Para mais informações sobre famílias de imagens, consulte práticas recomendadas ao usar famílias de imagens no Compute Engine.

Especifique uma das opções a seguir para a propriedade disks:

  • Especifique initializeParams para criar discos de inicialização permanentes para cada instância. Adicione até 15 discos secundários que não sejam de inicialização usando a propriedade initializeParams de cada disco adicional. É possível criar discos usando imagens públicas ou personalizadas (ou famílias de imagens) em sourceImage, conforme mostrado no exemplo anterior. Para adicionar discos vazios, não especifique um sourceImage.

  • Especifique source para anexar um disco de inicialização permanente atual. Se você anexar um disco de inicialização, só será possível criar uma instância do seu modelo.

Opcionalmente, é possível especificar as propriedades diskSizeGb, diskType e labels para initializeParams e diskSizeGb para source.

Se você tiver escolhido uma imagem compatível com VM protegida, será possível alterar as configurações da VM protegida da VM usando os itens do corpo da solicitação booleana a seguir:

  • enableSecureBoot: ativar ou desativar a inicialização segura

    A inicialização segura ajuda a proteger as instâncias de VM contra malware e rootkits nos níveis de inicialização e kernel. Para mais informações, consulte Inicialização segura.

  • enableVtpm: ativar ou desativar o módulo de plataforma virtual confiável (vTPM, na sigla em inglês)

    O vTPM permite a Inicialização medida, que valida a integridade da VM antes e durante a inicialização. Para mais informações, consulte Módulo da plataforma virtual confiável (vTPM).

  • enableIntegrityMonitoring: ativar ou desativar o monitoramento de integridade.

    O monitoramento de integridade permite monitorar e verificar a integridade da inicialização do ambiente de execução das instâncias de VM protegidas usando relatórios do Cloud Monitoring. Para mais informações, consulte Monitoramento de integridade.

Para saber mais sobre os parâmetros de solicitação, consulte o método instanceTemplates.insert.

Como criar um modelo de instância com base em uma existente

Use a API Compute Engine ou a ferramenta gcloud para salvar a configuração de uma instância de VM atual como um modelo de instância. Como opção, modifique a maneira como os discos de origem são definidos no modelo.

Se você precisar modificar outras propriedades, primeiro crie um modelo com base em uma instância atual e, em seguida, crie um modelo semelhante com outras modificações.

gcloud

Use o comando gcloud instance-templates create com as sinalizações --source-instance e --source-instance-zone.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --source-instance=SOURCE_INSTANCE \
    --source-instance-zone=SOURCE_INSTANCE_ZONE \

Para modificar como os discos da instância de origem são definidos, adicione uma ou mais sinalizações --configure-disk:

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --source-instance=SOURCE_INSTANCE \
    --source-instance-zone=SOURCE_INSTANCE_ZONE \
    --configure-disk= \
        device-name=SOURCE_DISK, \
        instantiate-from=INSTANTIATE_FROM, \
        auto-delete=AUTO_DELETE

Substitua:

  • INSTANCE_TEMPLATE_NAME é o nome do modelo a ser criado;
  • SOURCE_INSTANCE é o nome da instância a ser usada como modelo para o novo modelo;
  • SOURCE_INSTANCE_ZONE é a zona que contém a instância de origem;
  • SOURCE_DISK é o nome de um disco de instância de origem que você quer substituir no modelo;
  • INSTANTIATE_FROM especifica se precisa incluir o disco e qual imagem usar. Os valores válidos dependem do tipo de disco:

    • source-image ou source-image-family: válido somente para discos de inicialização e outros discos de leitura/gravação permanentes.
    • custom-image: válido somente para discos de inicialização e outros discos de leitura/gravação permanentes. Se especificado, o caminho ou URL da imagem personalizada também precisa ser especificado, como no exemplo abaixo. Como alternativa, também é possível especificar uma família de imagens usando o seguinte formato:

      projects/exampleproject/global/images/family/IMAGE_FAMILY_NAME

      Substitua IMAGE_FAMILY_NAME pelo nome da família de imagens.

    • attach-read-only: válido apenas para discos somente leitura.

    • blank: válido apenas para discos permanentes que não sejam de inicialização e SSDs locais. Se especificado, quando o modelo for usado para criar uma nova instância, o disco será criado sem formatação. Formate e ative o disco em um script de inicialização para poder usá-lo em uma configuração escalonável.

    • do-not-include: válido apenas para discos permanentes que não sejam de inicialização e discos somente leitura.

    • blank: válido apenas para discos permanentes que não sejam de inicialização e discos somente leitura.

  • AUTO_DELETE especifica se o disco será excluído automaticamente quando a instância for excluída. Os valores válidos são: false, no, true e yes.

Por exemplo, o comando a seguir cria um modelo de instância com base em my-source-instance, com a opção de usar a imagem original de data-disk-a, mas definindo a exclusão automática como true e substituindo data-disk-b por uma imagem personalizada.

gcloud compute instance-templates create my-instance-template  \
    --source-instance=my-source-instance \
    --configure-disk=device-name=data-disk-a,instantiate-from=source-image, \
      auto-delete=true
    --configure-disk=device-name=data-disk-b,instantiate-from=custom-image, \
      custom-image=projects/cps-cloud/global/images/cos-89-16108-403-15

API

Chame o método instanceTemplates.insert e especifique o campo sourceInstance. Para modificar a maneira como os discos da instância de origem são definidos, adicione um ou mais campos diskConfigs.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "sourceInstance": "zones/SOURCE_INSTANCE_ZONE/instances/SOURCE_INSTANCE",
  "sourceInstanceParams": {
    "diskConfigs": [
      {
        "deviceName": "SOURCE_DISK",
        "instantiateFrom": "INSTANTIATE_FROM",
        "autoDelete": false
      }
    ]
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto para a solicitação.
  • INSTANCE_TEMPLATE_NAME: o nome do novo modelo
  • SOURCE_INSTANCE_ZONE é a zona da instância de origem
  • SOURCE_INSTANCE: o nome da instância de origem a ser usada como modelo para esse modelo de instância
  • SOURCE_DISK o nome de um disco de instância de origem que você quer substituir no modelo
  • INSTANTIATE_FROM especifica se precisa incluir o disco e qual imagem usar

    Os valores válidos dependem do tipo de disco:

    • source-image ou source-image-family: válido somente para discos de inicialização e outros discos de leitura/gravação permanentes.
    • custom-image: válido somente para discos de inicialização e outros discos de leitura/gravação permanentes. Se especificado, o caminho ou URL da imagem personalizada também precisa ser especificado, como no exemplo abaixo. Como alternativa, também é possível especificar uma família de imagens usando o seguinte formato:

      projects/exampleproject/global/images/family/IMAGE_FAMILY_NAME

      Substitua IMAGE_FAMILY_NAME pelo nome da família de imagens.

    • attach-read-only: válido apenas para discos somente leitura.

    • blank: válido apenas para discos permanentes que não sejam de inicialização e SSDs locais. Se especificado, quando o modelo for usado para criar uma nova instância, o disco será criado sem formatação. Formate e ative o disco em um script de inicialização para poder usá-lo em uma configuração escalonável.

    • do-not-include: válido apenas para discos permanentes que não sejam de inicialização e discos somente leitura.

O exemplo a seguir cria um novo modelo de instância com base em my-source-instance. No modelo de instância, a imagem de data-disk-a é substituída por projects/cos-cloud/global/images/cos-89-16108-403-15.

POST https://compute.googleapis.com/compute/v1/projects/my_project/global/instanceTemplates

{
  "name": "my-instance-template",
  "sourceInstance": "zones/us-central1-a/instances/my-source-instance",
  "sourceInstanceParams":
  {
    "diskConfigs":
    [
      {
        "deviceName": "data-disk-a",
        "instantiateFrom": "custom-image",
        "customImage": "projects/cos-cloud/global/images/cos-89-16108-403-15"
      }
    ]
  }
}

Na tabela a seguir, mostramos as opções para modificar a maneira como os discos são definidos no modelo.

Tipo de disco Opções
Disco de inicialização
  • [Padrão] Use a mesma imagem de origem ou família de imagens que foi usada para criar o disco de inicialização na instância de origem.
  • Use o URL de qualquer imagem (personalizada ou pública), conforme descrito no exemplo anterior, ou especifique uma família de imagens usando o seguinte formato:

    projects/exampleproject/global/images/family/IMAGE_FAMILY_NAME

Outros discos permanentes de leitura/gravação
  • [Padrão] Use a mesma imagem/família de imagens de origem que foi usada para criar o disco na instância de origem. Observação: se o disco da instância de origem não tiver uma imagem de origem ou uma propriedade de família de imagem desse tipo, ele será incluído no modelo como um disco vazio.
  • Use o URL de qualquer imagem (personalizada ou pública), conforme descrito no exemplo anterior, ou especifique uma família de imagens usando o seguinte formato:

    projects/exampleproject/global/images/family/IMAGE_FAMILY_NAME

  • Use um disco vazio no modelo. Quando o modelo é usado para criar uma nova instância, esse disco é criado sem formatação. Formate e ative o disco em um script de inicialização para poder usá-lo em uma configuração escalonável.
  • Não inclua o disco.
Discos somente de leitura
  • [Padrão] Inclua o disco no modo somente leitura.
  • Não inclua o disco.
SSDs locais
  • [Padrão] Inclua um SSD local em branco. Quando o modelo é usado para criar uma nova instância, esse disco é criado sem formatação. Formate e ative o disco em um script de inicialização para poder usá-lo em uma configuração escalonável.

Também é possível modificar o atributo auto-delete para cada disco, especificando se ele precisa ser excluído ou não quando sua instância associada for excluída.

Por padrão, se nenhuma opção de modificação for especificada, a configuração do disco no modelo corresponderá à instância de origem.

Como criar um modelo de instância com base em um modelo atual

Não é possível atualizar um modelo de instância atual. No entanto, se um modelo de instância ficar desatualizado ou se você precisar fazer alterações, use o console para criar outro com propriedades semelhantes.

  1. Acesse a página Modelos de instância.

    Acesse "Modelos de instância"

  2. Clique no modelo da instância que você quer copiar e atualizar.

  3. Clique em Criar semelhante.

  4. Atualize a configuração no novo modelo.

  5. Clique em Criar.

Como criar um modelo de instância com uma imagem de contêiner

Especifique uma imagem de contêiner em um modelo de instância. Por padrão, o Compute Engine também inclui no modelo uma imagem do sistema operacional Container-Optimized com o Docker instalado. Quando você usa o modelo para criar uma nova instância, o contêiner é iniciado automaticamente à medida que a instância é iniciada.

Console

  1. Acesse a página Modelos de instância.

    Acesse "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Na seção Contêiner, marque a caixa de seleção Implantar uma imagem de contêiner nesta instância de VM.

  4. Especifique a Imagem de contêiner a ser usada.

    • É possível especificar uma imagem do Container Registry ou do Artifact Registry. Por exemplo:
      • gcr.io/cloud-marketplace/google/nginx1:1.12 seleciona uma imagem de contêiner NGINX 1.12 do Google Cloud Marketplace.
      • us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 seleciona uma amostra de imagem hello-app armazenada no Artifact Registry.
    • Se você usar uma imagem de contêiner do Docker Hub, sempre especifique o nome completo da imagem do Docker. Por exemplo, forneça o seguinte nome para implantar uma imagem do contêiner Apache: docker.io/httpd:2.4
  5. Se quiser, clique em Opções de contêiner avançadas. Para mais informações, consulte Como configurar opções para executar seu contêiner.

  6. Clique em Criar.

gcloud

Use o comando gcloud compute instance-templates create-with-container (em inglês).

gcloud compute instance-templates create-with-container INSTANCE_TEMPLATE_NAME \
     --container-image=CONTAINER_IMAGE

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo a ser criado;
  • CONTAINER_IMAGE: o nome completo da imagem do contêiner a ser usada.

Por exemplo, o comando a seguir cria um novo modelo de instância chamado nginx-vm. Uma instância de VM criada a partir desse modelo inicia e executa a imagem de contêiner, gcr.io/cloud-marketplace/google/nginx1:1.12, quando a VM é iniciada.

gcloud compute instance-templates create-with-container nginx-vm \
     --container-image=gcr.io/cloud-marketplace/google/nginx1:1.12

Você também pode configurar opções para executar seu contêiner.

Como criar um modelo de instância que especifica uma sub-rede

Use a sinalização --subnet para colocar instâncias criadas a partir do modelo na sub-rede escolhida. A sinalização --subnet exige a sinalização --region.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --region=REGION \
    --subnet=SUBNET_NAME_OR_URL

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo da instância
  • REGION: a região da sub-rede
  • SUBNET_NAME_OR_URL: o nome da sub-rede ou o URL dela

No exemplo a seguir, criamos um modelo chamado template-qa que gera instâncias apenas na sub-rede subnet-us-qa.

gcloud compute instance-templates create template-qa \
    --region=us-central1 \
    --subnet=subnet-us-qa

Created [https://compute.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME        MACHINE_TYPE  PREEMPTIBLE CREATION_TIMESTAMP
template-qa e2-standard-2             2019-12-23T20:34:00.791-07:00

O uso desse modelo para criar instâncias de um MIG com ou sem escalonamento automático, gera automaticamente a instância na região e na sub-rede especificadas. Isso permite controlar a sub-rede de novas instâncias criadas para balanceamento de carga.

Usar imagens personalizadas ou públicas nos modelos de instância

É possível usar uma imagem personalizada ou uma imagem pública para os modelos de instância:

  • Imagens personalizadas. Como os MIGs foram projetados para adicionar e remover instâncias com frequência, vale a pena criar uma imagem personalizada e especificá-la no modelo de instância. Prepare a imagem com os aplicativos e as configurações necessários para que as VMs não precisem configurar manualmente esses itens em VMs individuais no MIG.

  • Imagens públicas. É possível criar um modelo de instância que use uma imagem pública e um script de inicialização para preparar essa instância assim que ela começar a ser executada.

As imagens personalizadas têm caráter mais determinista e são inicializadas mais rapidamente do que as VMs com scripts de inicialização. No entanto, esses scripts são mais flexíveis e permitem que você atualize os apps e as configurações nas suas instâncias com mais facilidade.

Se você estiver gerenciando imagens usando famílias de imagens, especifique o nome da sua família de imagens personalizada ou pública no modelo de instância. Para mais informações sobre famílias de imagens, consulte práticas recomendadas ao usar famílias de imagens no Compute Engine.

Atualizar um modelo de instância

Não é possível atualizar ou alterar um modelo de instância depois de criá-lo. Caso tenha um modelo desatualizado ou precise fazer alterações na configuração, crie outro modelo.

A seguir