Como criar modelos de instância

Nesta página, você aprenderá a criar e gerenciar modelos de instância. Nos modelos de instância, são definidos o tipo de máquina, a imagem, a zona e outras propriedades das instâncias contidas em um grupo de instâncias gerenciado. Você precisa de um modelo de instância para criar um grupo de instâncias gerenciado.

Para saber mais sobre modelos de instância, leia Visão geral de grupos de instâncias.

Antes de começar

Criar um modelo de instância

Para criar grupos de instâncias gerenciados, você precisa de um modelo de instância. Esses grupos só contêm instâncias de máquina virtual idênticas. A fim de mantê-las idênticas, o modelo de instância especificado no grupo de instâncias é usado para criar as instâncias de VMs desse grupo.

No modelo de instância, é possível descrever qualquer propriedade da instância definida em uma solicitação normal de API para criar uma instância de VM. Entre essas propriedades estão incluídas metadados de instância, scripts de inicialização, discos permanentes, contas de serviço etc.

Para criar um modelo de instância, são necessárias, no mínimo, as mesmas propriedades exigidas para a criação de uma instância. Consulte uma lista dos campos obrigatórios na referência de instanceTemplates().insert.

Crie um modelo de instância pelo console do Google Cloud Platform, pela ferramenta gcloud compute ou pela API.

Console

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

    Acessar a página "Modelos de instância"

  2. Clique em Criar modelo de instância.
  3. Preencha os campos desejados para o modelo de instância ou aceite os valores padrão. Os seguintes valores são fornecidos por padrão:

    • tipo de máquina: 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 instância
    • rede da VPC: a rede da VPC default
    • endereço IP: um endereço IP externo temporário
  4. 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]

Substitua [INSTANCE_TEMPLATE] pelo nome desejado para o modelo de instância.

Quando você não fornece as configurações do modelo explicitamente, um modelo é criado no gcloud compute com os seguintes valores padrão:

  • Tipo de máquina: n1-standard-1
  • Família de imagens: a imagem Debian mais recente
  • Projeto de imagem: o projeto que detém e compartilha as imagens Debian públicas
  • Disco de inicialização: um novo disco de inicialização padrão nomeado conforme a instância
  • rede: a rede da VPC default
  • 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 n1-standard-4 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --boot-disk-size 250GB

Você pode consultar uma lista de sinalizações disponíveis na referência de gcloud compute.

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

gcloud compute instance-templates describe example-template

creationTimestamp: '2014-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://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    kind: compute#attachedDisk
    mode: READ_WRITE
    type: PERSISTENT
  machineType: n1-standard-1
  networkInterfaces:
  - accessConfigs:
    - kind: compute#accessConfig
      name: external-nat
      type: ONE_TO_ONE_NAT
    network: https://www.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://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template

API

Na API do modelo de instância, defina explicitamente todos os campos de configuração obrigatórios conforme descrito na documentação de instanceTemplates().insert. Abaixo, há um exemplo de modelo de instância com o mínimo de campos obrigatórios:

{
"name": "example-template",
"properties": {
  "machineType": "zones/us-central1-a/machineTypes/n1-standard-4",
  "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/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

Para a propriedade disks, forneça a propriedade initializeParams para criar novos discos de inicialização permanentes ou a propriedade source para anexar um disco já existente. Se você anexar um disco de inicialização, só será possível criar uma instância a partir do seu modelo.

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

Agora os comandos de modelo têm sinalizações --subnet e --region que colocam novas instâncias na sub-rede escolhida. A sinalização --subnet exige a sinalização --region. A sub-rede já precisa existir para que possa ser incluída em um modelo de instância.

gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
    --region [REGION] \
    --subnet [SUBNET_NAME]

Faça as seguintes substituições:

  • [INSTANCE_TEMPLATE] pelo nome desejado para o modelo de instância
  • [REGION] pela região da sub-rede
  • [SUBNET_NAME] pelo nome da sub-rede

Neste exemplo, foi criado um modelo chamado template-qa que só cria instâncias na sub-rede subnet-us-qa.

gcloud compute instance-templates create template-qa \
    --region us-central1 \
    --subnet subnet-us-qa
Created [https://www.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME        MACHINE_TYPE  PREEMPTIBLE CREATION_TIMESTAMP
template-qa n1-standard-1             2015-12-23T20:34:00.791-07:00

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

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

Como os grupos de instâncias gerenciados 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 as configurações e os aplicativos necessários nas instâncias para não precisar configurar esses itens manualmente em cada instância do grupo.

Você também pode criar um modelo de instância em que sejam usados um script de inicialização e uma imagem pública para preparar a instância depois 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 instâncias com scripts de inicialização. Por outro lado, esses scripts são mais flexíveis e, com eles atualize com facilidade as configurações e os aplicativos das instâncias.

Modelos deterministas de instância

Em geral, recomendamos que você defina as propriedades do modelo de instância da maneira mais explícita e determinista possível. Se decidir empregar scripts de inicialização que instalem ou usem serviços de terceiros nos seus modelos de instância, verifique se informações explícitas como a versão do aplicativo a ser instalado são fornecidas. O Compute Engine depende das informações definidas no modelo, ele não tem nenhum controle sobre os serviços de terceiros referenciados. O modelo de instância pode apresentar comportamentos inesperados quando ele é muito vago.

Por exemplo, considere o comando a seguir para criar um modelo de instância com um script de inicialização que instala o apache2 e usa um arquivo hospedado em um servidor externo:

gcloud compute instance-templates create example-template-with-startup \
    --image-family debian-9 \
    --image-project debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt-get install -y apache2
    scp myuser@108.59.87.185:index.php /var/www/'

Há dois problemas em potencial nesse script de inicialização:

  • No script, a versão do apache2 a ser instalada não está definida explicitamente, e ele depende da versão atual disponível no repositório apt-get.
  • O script depende de um arquivo hospedado em um serviço de terceiros sem informação de versão. Esse arquivo pode ter sido alterado depois que o modelo de instância foi usado pela última vez.

Quando você usa um autoescalador com um modelo de instância não determinista, as novas instâncias podem acabar sendo adicionadas a um grupo de instâncias gerenciadas com uma configuração diferente (como outra versão do apache2, por exemplo).

De maneira semelhante, se você aplica esse modelo a um grupo de instâncias gerenciado, atualiza o grupo para um modelo diferente usando o serviço Instance Group Updater e decide revertê-lo ao modelo anterior, pode acabar com as instâncias usando uma versão do apache2 ou do arquivo index.php diferente daquela usada antes da atualização. Na inicialização das instâncias, a versão carregada sempre é a mais recente.

Para evitar comportamentos inesperados no modelo, use um destes métodos:

  • Use imagens do Container-Optimized ou do Docker, com tags do Docker. Por exemplo, recomendamos que você atribua novas tags a cada versão nova da imagem do Docker. Além disso, use essas tags nos modelos de instância, em vez da tag padrão mais recente. Para imagens do Container-Optimized, faça uma referência explícita a uma versão específica da imagem no arquivo de manifesto. Este exemplo usa a imagem "myimage" do Docker na versão com a tag "version_2_1_3":

    version: v1beta2
    containers:
      - name: simple-echo
        image: myimage:version_2_1_3
           [ rest of your manifest file ]
    
  • Crie uma imagem personalizada para ser usada como a imagem do modelo. Dê preferência a essa opção, porque você consegue garantir que as instâncias sejam idênticas. Quando usa um script de inicialização, o resultado pode ser diferente, dependendo das atualizações do pacote de distribuição. Use scripts de inicialização nos modelos de instância para criar protótipos e fazer um desenvolvimento rápido. Escolha as imagens personalizadas quando estiver pronto para implantar os serviços de produção-qualidade.

  • Caso precise usar os scripts de inicialização, verifique se é possível torná-los deterministas. Por exemplo, crie uma versão do modelo anterior e especifique um script de inicialização determinista da seguinte maneira:

    gcloud compute instance-templates create example-template-with-startup-2-1-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --metadata startup-script='#! /bin/bash
        sudo apt-get install -y apache2=2.2.20-1ubuntu1
        scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
    

    onde "version_2_1_3" é um subdiretório com scripts PHP para a versão 2.1.3 do seu serviço.

Metadados e scripts de inicialização

Nos modelos de instância, é possível especificar metadados e scripts de inicialização da mesma maneira que você os especificaria ao criar uma instância diretamente. Esses metadados e scripts de inicialização são aplicados às novas instâncias criadas ou recriadas a partir do modelo.

Por exemplo, se você define, no seu modelo de instância, um par chave-valor de metadados como este:

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

{
 "name": "example-instance-template",
 "properties": {
  "machineType": "n1-standard-1",
  "disks": [
    ...
   }
  ],
  "metadata": {
   "items": [
    {
     "key": "apple",
     "value": "red"
    }
   ]
  },
  ...
}

Os metadados apple:red são aplicados a todas as instâncias criadas a partir desse modelo de instância.

Atualizar um modelo de instância

Não é possível atualizar nem 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.

Como conseguir informações sobre um modelo de instância

Console

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

    Acessar a página "Modelos de instância"

  2. Clique no nome do modelo de instância para ver os detalhes dele.

gcloud

Na ferramenta de linha de comando gcloud, execute:

gcloud compute instance-templates describe [INSTANCE_TEMPLATE]

API

Na API, faça uma solicitação instanceTemplates().get:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/instanceTemplates/[INSTANCE_TEMPLATE]

Listar os modelos de instância

Para uma lista dos modelos de instância criados por você:

Console

Na página "Modelos de instância", há uma lista de todos os modelos de instância do seu projeto.

Acessar a página "Modelos de instância"

gcloud

Na ferramenta de linha de comando gcloud, execute:

gcloud compute instance-templates list

API

Na API, faça uma solicitação instanceTemplates().list:

GET https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates

Excluir um modelo de instância

Se você excluir um modelo de instância, ele será removido da sua lista de modelos. Não é possível excluir um modelo de instância referenciado por um grupo de instâncias gerenciado.

Console

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

    Acessar a página "Modelos de instância"

  2. Selecione os modelos de instância que deseja excluir.
  3. Clique em Excluir.

gcloud

Na ferramenta de linha de comando gcloud, execute:

gcloud compute instance-templates delete example-template

API

Na API, faça uma solicitação instanceTemplates().delete:

DELETE https://www.googleapis.com/compute/v1/projects/myproject/global/instanceTemplates/example-template

Em alguns casos, as instâncias de um grupo de instâncias gerenciado podem estar fora de sincronia e usar um modelo de instância diferente em relação às outras instâncias do mesmo grupo. Quando uma instância usa um modelo diferente do especificado para o grupo, ela continua usando esse modelo para eventos de recuperação automática, mesmo se ele for excluído. Recrie essa instância para atualizá-la para o novo modelo.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine