Criar imagens de máquina

Use uma imagem de máquina para armazenar toda a configuração, metadados, permissões e dados de vários discos para uma instância do Compute Engine. A instância usada para criar uma imagem de máquina é chamada de instância de origem.

Para informações sobre quando e como usar imagens de máquina, consulte Imagens de máquina.

Neste documento, descrevemos as etapas para criar uma imagem de máquina com base em uma instância de origem.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. Com isso, você confirma sua identidade para acesso a serviços e APIs do Cloud de Confiance by S3NS . Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console Cloud de Confiance para acessar serviços Cloud de Confiance by S3NS e APIs, não é necessário configurar a autenticação.

    gcloud

    1. Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:

      gcloud init
  • Defina uma região e uma zona padrão.
  • REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para CLI gcloud.

      Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada.

    Saiba mais em Autenticar para usar REST na documentação de autenticação do Cloud de Confiance .

Limitações e restrições

  • É possível criar uma imagem de máquina de uma instância específica no máximo seis vezes a cada 60 minutos.
  • É possível proteger uma imagem de máquina usando o Cloud Key Management Service (Cloud KMS) ou uma chave de criptografia fornecida pelo cliente (CSEK, na sigla em inglês). A chave de criptografia protege o conteúdo dos discos. No entanto, os metadados não são protegidos.
  • Se você usar uma CSEK para proteger a imagem de máquina, uma cópia completa de todos os dados do disco será armazenada durante a geração dessa imagem. Nos outros casos, os dados do disco são armazenados em cópias diferenciais.
  • Não é possível criar imagens de máquina de instâncias de origem do Compute Engine que:

    • Ter discos anexados com uma capacidade combinada superior a 200 TiB.
    • Não há discos anexados.
    • Ter volumes do Hyperdisk anexados.
    • Use o tipo de máquina Z3, exceto z3-highmem-192-highlssd-metal.
    • Use um tipo de máquina C3D, H3 ou A3.

    Para instâncias que não oferecem suporte à criação de imagens de máquina, crie uma imagem do SO com base no disco de inicialização da instância, conforme descrito em Criar imagens personalizadas.

  • Não é possível especificar discos para incluir e excluir ao mesmo tempo.

Propriedades de instância e disco não compatíveis com a imagem de máquina

Quando você cria imagens de máquina a partir de instâncias ou cria instâncias a partir de imagens de máquina, as seguintes propriedades de instância e disco não são preservadas ou restauradas:

  • disks.architecture
  • disks.description
  • disks.labels
  • disks.locked
  • disks.multiWriter
  • disks.onUpdateAction
  • disks.provisionedIops
  • disks.shieldedInstanceInitialState
  • disks.sourceImage
  • disks.sourceImageEncryptionKey
  • disks.sourceInstantSnapshot
  • disks.sourceSnapshot
  • disks.sourceSnapshotEncryptionKey
  • privateIpv6GoogleAccess
  • resourceManagerTags
  • resourcePolicies
  • secure_tag
  • shieldedInstanceConfig

Criar uma imagem de máquina de uma instância

Por padrão, uma imagem de máquina inclui o disco de inicialização e todos os outros discos anexados à instância de origem do Compute Engine. Você pode especificar quais discos que não são de inicialização incluir ou excluir, mas não é possível excluir o disco de inicialização.

Crie uma imagem de máquina de uma instância e inclua todos os discos anexados

É possível criar imagens de máquina usando o console doCloud de Confiance , a Google Cloud CLI ou REST.

Para criar uma imagem de máquina, você precisa das seguintes informações:

  • um nome para a imagem de máquina que você quer criar;
  • o nome da instância de origem;
  • a zona em que a instância de origem está localizada;
  • uma descrição opcional;
  • um storageLocation (em inglês) opcional; Se você não especificar um local, o local de armazenamento padrão será o local multirregional do Cloud Storage da instância de origem.
  • uma chave de criptografia opcional. É possível escolher entre um Google Cloud-powered encryption key, uma chave do Cloud Key Management Service (Cloud KMS) ou uma chave de criptografia fornecida pelo cliente (CSEK). Se nenhuma chave de criptografia for especificada, as imagens de máquina serão criptografadas usando uma Google Cloud-powered encryption key.
  • Se você quiser usar uma imagem de máquina para clonar e capturar snapshots de uma instância, você precisará remover as informações de SO e do app exclusivas dela antes de gerar a imagem de máquina usando uma instância. Por exemplo, para instâncias de VM do Windows, use GCESysprep a fim de preparar o sistema para a replicação.

Console

  1. No console do Cloud de Confiance , acesse a página Imagens de máquina.

    Acessar Imagens de máquina

  2. Clique em Criar imagem de máquina.

  3. Especifique um Nome para sua imagem de máquina.

  4. Opcional: forneça uma Descrição.

  5. Selecione a instância da VM de origem.

  6. Opcional: especifique onde armazenar a imagem de máquina. Escolha entre armazenamento multirregional ou regional. Para mais informações sobre o local, consulte Local de armazenamento de imagens de máquina.

  7. Opcional: selecione um método de Criptografia.

  8. Clique em Criar.

gcloud

Use o comando gcloud compute machine-images create para criar uma imagem de máquina usando uma instância.

gcloud compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME

Substitua:

  • MACHINE_IMAGE_NAME: nome da imagem de máquina que você quer criar.
  • SOURCE_INSTANCE_NAME: nome da instância de origem de que você quer criar a imagem.

Exemplo

É possível usar o comando gcloud a seguir para criar uma imagem de máquina chamada my-machine-image a partir de uma instância de origem chamada my-instance:

gcloud compute machine-images create my-machine-image  \
    --source-instance=my-instance

O processo leva alguns minutos. Quando a imagem de máquina é criada, você recebe uma saída semelhante a esta:

Created [https://www.googleapis.com/compute/v1/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

REST

Na API, crie uma solicitação POST para o método machineimages.insert. No corpo da solicitação, inclua esta solicitação POST:

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

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL"
}

Substitua:

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

    • https://www.googleapis.com/compute/v1/projects/myProject/global/instances/my-instance
    • projects/myProject/global/instances/my-instance
    • global/instances/my-instance

Criar uma imagem de máquina e incluir discos específicos (prévia)

É possível usar o backup seletivo de disco para criar uma imagem de máquina que inclua ou exclua discos específicos que não sejam de inicialização.

Com os backups seletivos de disco, é possível realizar as seguintes tarefas ao criar uma imagem de máquina:

  • Incluir discos específicos que não são de inicialização: é possível criar uma imagem de máquina que faz backup apenas do disco de inicialização e de uma lista específica de discos que não são de inicialização fornecida por você.

  • Excluir discos específicos que não são de inicialização: é possível criar uma imagem de máquina que faça backup do disco de inicialização e de todos os discos anexados que não são de inicialização, exceto aqueles especificados em uma lista de exclusão.

Práticas recomendadas para instâncias do Linux

Para instâncias do Linux, recomendamos as seguintes práticas recomendadas:

  • Ao criar uma imagem de máquina que exclui discos específicos não de inicialização ou os omite usando uma lista de inclusão, verifique se o arquivo /etc/fstab nas instâncias de origem do Compute Engine no Linux usa a opção nofail para esses discos. Isso evita que a instância restaurada do Compute Engine não seja inicializada se um disco esperado estiver faltando.

  • Durante o processo de inicialização de uma instância do Compute Engine restaurada de uma imagem de máquina, o sistema operacional tenta montar todos os discos listados em /etc/fstab. Se um disco esperado estiver faltando e a opção nofail não for especificada, o processo de inicialização será interrompido, e a instância não poderá ser inicializada. Como solução alternativa para lidar com falhas de inicialização, consulte Soluções alternativas para falhas de inicialização causadas pela exclusão de discos específicos.

Incluir apenas discos específicos

Use as instruções a seguir para criar uma imagem de máquina apenas com discos específicos. É preciso sempre incluir o disco de inicialização. Não é possível criar uma imagem de máquina apenas de discos específicos usando o console do Cloud de Confiance . Use a Google Cloud CLI ou REST.

CLI do Google Cloud

Use o comando gcloud beta compute machine-images create para criar uma imagem de máquina usando apenas discos específicos.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME \
    --source-instance-zone=ZONE \
    --include-disks=BOOT_DISK,DISK_NAME_1,DISK_NAME_2

Substitua:

  • MACHINE_IMAGE_NAME: o nome da imagem de máquina que você quer criar.
  • SOURCE_INSTANCE_NAME: o nome da instância de origem que você quer usar para criar a imagem.
  • ZONE: a zona em que a instância de origem está localizada.
  • BOOT_DISK, DISK_NAME_1,DISK_NAME_2: uma lista separada por vírgulas do disco de inicialização e dos discos que não são de inicialização anexados à instância de origem que você quer incluir na imagem de máquina.

Por exemplo, é possível usar o comando gcloud a seguir para criar uma imagem de máquina chamada my-gmi-include a partir de uma instância de origem chamada my-instance localizada em us-central1-a, incluindo apenas data-disk-1 e data-disk-2:

gcloud beta compute machine-images create my-gmi-include \
    --source-instance=my-instance \
    --source-instance-zone=us-central1-a \
    --include-disks=boot-disk,data-disk-1,data-disk-2

REST

Na API, crie uma solicitação POST para o método machineimages.insert. No corpo da solicitação, inclua esta solicitação POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL",
  "params": {
    "includedDisks": ["BOOT_DISK", "DISK_NAME_1", "DISK_NAME_2"]
  }
}

Substitua:

  • PROJECT_ID: ID do projeto que contém a imagem da máquina, por exemplo, my-project.
  • MACHINE_IMAGE_NAME: nome da imagem de máquina que você quer criar.
  • SOURCE_INSTANCE_URL: URL completo ou parcial da instância de origem que você quer usar para criar a imagem de máquina.
  • BOOT_DISK, DISK_NAME_1, DISK_NAME_2: lista do disco de inicialização e dos discos que não são de inicialização anexados à instância de origem que você quer incluir na imagem de máquina.

Criar uma imagem de máquina e excluir discos específicos (prévia)

Use as instruções a seguir para criar uma imagem de máquina e excluir discos específicos do backup. Não é possível excluir o disco de inicialização. Não é possível criar uma imagem de máquina e excluir discos específicos usando o console do Cloud de Confiance . É possível usar a Google Cloud CLI ou REST.

gcloud

Use o comando gcloud beta compute machine-images create para criar uma imagem de máquina e excluir discos específicos.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME \
    --source-instance-zone=ZONE \
    --exclude-disks=DISK_NAME_1,DISK_NAME_2

Substitua:

  • MACHINE_IMAGE_NAME: nome da imagem de máquina que você quer criar.
  • SOURCE_INSTANCE_NAME: nome da instância de origem de que você quer criar a imagem.
  • ZONE: a zona em que a instância de origem está localizada.
  • DISK_NAME_1,DISK_NAME_2: lista separada por vírgulas dos discos que não são de inicialização anexados à instância de origem que você quer excluir da imagem de máquina.

Exemplo

Por exemplo, é possível usar o comando gcloud a seguir para criar uma imagem de máquina chamada my-gmi-exclude a partir de uma instância de origem chamada my-instance localizada em us-central1-a, excluindo temp-disk-1 e scratch-disk:

 gcloud beta compute machine-images create my-gmi-exclude \
    --source-instance=my-instance \
    --source-instance-zone=us-central1-a \
    --exclude-disks=temp-disk-1,scratch-disk

REST

Na API, crie uma solicitação POST para o método machineimages.insert. No corpo da solicitação, inclua esta solicitação POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL",
  "params": {
    "excludedDisks": ["DISK_NAME_1", "DISK_NAME_2"]
  }
}

Substitua:

  • PROJECT_ID: ID do projeto que contém a imagem de máquina.
  • MACHINE_IMAGE_NAME: nome da imagem de máquina que você quer criar.
  • SOURCE_INSTANCE_URL: URL completo ou parcial da instância de origem que você quer usar para criar a imagem de máquina.
  • DISK_NAME_1, DISK_NAME_2: lista dos discos que não são de inicialização anexados à instância de origem que você quer excluir da imagem de máquina.

Soluções alternativas para falhas de inicialização causadas pela exclusão de discos específicos

Se você criar uma instância de uma imagem de máquina em que um disco excluído causa uma falha de inicialização, recupere a instância usando uma das seguintes soluções alternativas:

  • Conecte-se ao console serial: ative e conecte-se ao console serial interativo da instância do Compute Engine que não pode ser inicializada. Faça login para resolver o problema e edite o arquivo /etc/fstab diretamente para remover a entrada de disco ausente ou adicionar a opção nofail.

  • Troca de disco: se uma instância do Compute Engine não for inicializada porque um disco foi excluído da imagem de máquina, mas ainda está listado em /etc/fstab sem a opção nofail, use as instruções a seguir para corrigir a configuração usando a Google Cloud CLI.

    1. Interrompa a instância não inicializável do Compute Engine usando o comando gcloud compute instances stop:

      gcloud compute instances stop UNBOOTABLE_INSTANCE_NAME \
       --zone=ZONE
      

      Substitua:

      • UNBOOTABLE_INSTANCE_NAME: nome da instância do Compute Engine que não pode ser inicializada.
      • ZONE: zona em que as instâncias do Compute Engine estão localizadas.
    2. Remova o disco de inicialização usando o comando gcloud compute instances detach-disk:

      gcloud compute instances detach-disk UNBOOTABLE_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

      Substitua:

      • UNBOOTABLE_INSTANCE_NAME: nome da instância do Compute Engine que não pode ser inicializada.
      • BOOT_DISK_NAME: nome do disco de inicialização anexado à instância não inicializável do Compute Engine.
      • ZONE: zona em que as instâncias do Compute Engine estão localizadas.
    3. Anexe o disco como um disco secundário a outra instância do Compute Engine em funcionamento usando o comando gcloud compute instances attach-disk:

      gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

      Substitua:

      • SECONDARY_INSTANCE_NAME: nome da instância secundária de trabalho do Compute Engine usada para reparar o disco.
      • BOOT_DISK_NAME: nome do disco de inicialização anexado à instância não inicializável do Compute Engine.
      • ZONE: zona em que as instâncias do Compute Engine estão localizadas.
    4. Monte o disco e edite o arquivo /etc/fstab para corrigir a entrada problemática usando a seguinte sequência de instruções:

      1. Conecte-se à instância secundária do Compute Engine usando SSH:

        gcloud compute ssh SECONDARY_INSTANCE_NAME \
        --zone=ZONE
        

        Substitua:

        • SECONDARY_INSTANCE_NAME: nome da instância secundária de trabalho do Compute Engine usada para reparar o disco.
        • ZONE: zona em que as instâncias do Compute Engine estão localizadas.
      2. Identifique o disco conectado, geralmente /dev/sdb ou semelhante, usando lsblk:

        lsblk
        
      3. Crie um ponto de montagem temporário:

        sudo mkdir /mnt/repair
        
      4. Monte a partição raiz:

        sudo mount /dev/DEVICE_PARTITION /mnt/repair
        

        Substitua DEVICE_PARTITION pelo nome do dispositivo e o número da partição do disco secundário anexado na instância secundária do Compute Engine (por exemplo, sdb1).

      5. Abra o arquivo fstab.

        sudo nano /mnt/repair/etc/fstab
        
      6. Adicione a opção nofail à entrada do disco ausente ou adicione um comentário à linha inteira adicionando um # no início.

      7. Salve e saia.

      8. Desconecte o disco:

        sudo umount /mnt/repair
        
    5. Desanexe o disco da instância secundária do Compute Engine usando o comando gcloud compute instances detach-disk:

      gcloud compute instances detach-disk SECONDARY_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

      Substitua:

      • SECONDARY_INSTANCE_NAME: nome da instância secundária de trabalho do Compute Engine usada para reparar o disco.
      • BOOT_DISK_NAME: nome do disco de inicialização anexado à instância não inicializável do Compute Engine.
      • ZONE: zona em que as instâncias do Compute Engine estão localizadas.
    6. Reconecte o disco como o disco de inicialização à instância original do Compute Engine usando o comando gcloud compute instances attach-disk:

      gcloud compute instances attach-disk UNBOOTABLE_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --boot \
       --zone=ZONE
      

      Substitua:

      • UNBOOTABLE_INSTANCE_NAME: nome da instância do Compute Engine que não pode ser inicializada.
      • BOOT_DISK_NAME: nome do disco de inicialização anexado à instância não inicializável do Compute Engine.
      • ZONE: zona em que as instâncias do Compute Engine estão localizadas.
    7. Inicie a instância reparada do Compute Engine:

      gcloud compute instances start UNBOOTABLE_INSTANCE_NAME \
       --zone=ZONE
      

      Substitua:

      • UNBOOTABLE_INSTANCE_NAME: nome da instância do Compute Engine que não pode ser inicializada.
      • ZONE: zona em que as instâncias do Compute Engine estão localizadas.

A seguir