Como criar, excluir e suspender o uso de imagens personalizadas

É possível criar imagens personalizadas com base em discos, imagens, snapshots de origem ou imagens armazenadas no Cloud Storage. É possível usar essas imagens para criar instâncias de máquina virtual (VM, na sigla em inglês). Isso é ideal para situações em que você criou e modificou um disco de inicialização permanente para determinado estado e precisa salvar esse estado para criar instâncias.

Também é possível usar a ferramenta de importação de disco virtual para importar imagens do disco de inicialização dos sistemas atuais para o Compute Engine e adicioná-las à lista de imagens personalizadas.

Antes de começar

Como criar uma imagem personalizada

Com estas instruções, aprenda a criar uma imagem personalizada em uma instância do Linux. Para instruções sobre como criar uma imagem do Windows, consulte Como criar uma imagem do Windows.

Use as permissões do Cloud Identity and Access Management (Cloud IAM) para compartilhar imagens com outros projetos.

Como selecionar um local de armazenamento de imagens

Ao criar uma imagem personalizada, especifique o local dela no Cloud Storage, excluindo os locais birregionais. Ao especificar o local de armazenamento de imagens, você tem como atender aos seus requisitos normativos e de conformidade referentes a localidade de dados, bem como suas necessidades de alta disponibilidade, garantindo redundância entre regiões.

O recurso de local de armazenamento é opcional. Se um local não for selecionado, o Compute Engine armazenará a imagem na multirregião mais próxima da origem da imagem.

Para ver o local em que uma imagem está armazenada, use o comando images describe de gcloud compute:

gcloud compute images describe image-name --project project-id

⋮
storageLocations:
- us-central1

Todas as imagens que já existiam antes do lançamento desse recurso permanecem onde estão. A única alteração é que o local de todas as imagens pode ser visualizado. Se você tiver uma imagem atual que queira mover, recrie-a no local desejado.

Como preparar sua instância para uma imagem

Crie uma imagem de um disco mesmo com ele anexado a uma instância de VM em execução. No entanto, a imagem torna-se mais confiável se você a coloca em um estado mais fácil para a captura da imagem. Use um dos seguintes processos para preparar o disco de inicialização da imagem:

  • Pare a instância para que ela possa ser encerrada e parar de gravar dados no disco permanente.

  • Se não for possível parar a instância antes de criar a imagem, minimize a quantidade de gravações no disco e sincronize o sistema de arquivos.

    1. Pause os apps ou processos do sistema operacional que gravam dados nesse disco permanente.
    2. Execute uma limpeza de aplicativo no disco, se necessário. Por exemplo, o MySQL tem uma instrução FLUSH (em inglês). Outros aplicativos talvez usem processos semelhantes.
    3. Pare os aplicativos para que não gravem mais dados no disco permanente.
    4. Execute sudo sync.

Depois de preparar a instância, crie a imagem.

Como criar a imagem

Crie imagens de disco com base nas seguintes origens:

  • Um disco permanente, mesmo que esteja anexado a uma instância
  • Um snapshot de um disco permanente
  • Outra imagem no projeto
  • Uma imagem compartilhada de outro projeto
  • Uma imagem RAW compactada no Cloud Storage

Console

  1. No Console do Google Cloud, acesse a página Criar uma imagem.
    Acessar a página "Criar uma imagem"
  2. Especifique o Nome da imagem.
  3. Especifique a Origem da qual você quer criar uma imagem. Pode ser um disco permanente, um snapshot, outra imagem ou um arquivo disk.raw no Google Cloud Storage.
  4. Especifique o Local onde armazenar a imagem. Escolha o local de armazenamento da imagem na lista suspensa Com base na localização do disco de origem (padrão). Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.
  5. Especifique as propriedades da imagem. Por exemplo, especifique um nome de família para incluí-la como parte de uma família de imagens.
  6. Clique em Criar para criar a imagem.

gcloud

Na ferramenta de linha de comando gcloud, use o comando gcloud compute images create para criar uma imagem personalizada.

Criar uma imagem de um disco de origem:

gcloud compute images create image-name \
  --source-disk source-disk \
  --source-disk-zone zone \
  --family image-family \
  --storage-location location \
  --force

Substitua o seguinte:

  • image-name: um nome para a nova imagem.
  • source-disk: o disco que você quer usar como base para criar a imagem.
  • zone: a zona em que o disco está localizado.
  • image-family: uma sinalização opcional que especifica a que família de imagens essa imagem pertence.
  • location: uma sinalização opcional que permite designar a região ou a multirregião em que a imagem será armazenada. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.
  • [--force]: uma sinalização opcional que permite criar a imagem de uma instância em execução. Por padrão, não é possível criar imagens de instâncias em execução. Especifique essa sinalização apenas se tiver certeza de que quer criar a imagem enquanto a instância está sendo executada.

Criar uma imagem com base em imagens de origem:

gcloud compute images create image-name \
  --source-image source-image \
  --source-image-project image-project \
  --family image-family \
  --storage-location location

Substitua o seguinte:

  • image-name: um nome para a nova imagem.
  • source-image: a imagem que você quer usar como base para criar a nova imagem.
  • image-project: um parâmetro opcional que especifica em que projeto a imagem de origem está localizada. Use esse parâmetro se quiser copiar uma imagem de outro projeto.
  • image-family: uma sinalização opcional que especifica a que família de imagens essa nova imagem pertence.
  • location: uma sinalização opcional que permite designar a região ou a multirregião em que a imagem será armazenada. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.

Criar uma imagem de um snapshot:

gcloud compute images create image-name \
  --source-snapshot source-snapshot \
  --storage-location location

Substitua o seguinte:

  • image-name: um nome para a nova imagem.
  • source-snapshot: o snapshot que você quer usar como base para criar a imagem.
  • location: uma sinalização opcional que permite designar a região ou a multirregião em que a imagem será armazenada. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.

Ver o local de uma imagem:

Use o comando gcloud compute images describe para ver o local de uma imagem. Substitua image-name pelo nome da imagem que você quer analisar.

gcloud compute images describe image-name

API

Faça uma solicitação POST para o método images().insert, um URL no corpo da solicitação que aponta para o objeto de origem a partir de que você quer criar a imagem. Especifique URLs para seus recursos usando o próprio ID do projeto e nomes de recursos.

Criar uma imagem de um disco permanente:

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images

{
  "name": "image-name",
  "sourceDisk": "/zones/zone/disks/source-disk",
  "storageLocations": "location",
  "forceCreate": "TRUE"
}

Substitua o seguinte:

  • project-id: o projeto que contém a imagem.
  • image-name: um nome para a nova imagem que você quer criar.
  • zone: a zona em que o disco de origem está localizado.
  • source-disk: o disco que você quer usar como base para criar a imagem.
  • location: um parâmetro opcional que permite selecionar o local de armazenamento da imagem. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.
  • [FORCE_CREATE]: um parâmetro opcional que permite criar a imagem a partir de uma instância em execução. Especifique TRUE apenas se tiver certeza de que quer criar a imagem de uma instância em execução. Se você não especificar esse parâmetro, o valor padrão será FALSE.

Criar uma imagem de outra imagem:

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images

{
  "name": "image-name",
  "sourceImage": "/global/images/source-image",
  "storageLocations": "location"
}

Substitua o seguinte:

  • project-id: o projeto que contém a imagem.
  • image-name: um nome para a nova imagem que você quer criar.
  • source-image: a imagem que você quer usar como base para criar a imagem.
  • location: um parâmetro opcional que permite selecionar o local de armazenamento da imagem. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.

Criar uma imagem de um snapshot:

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images
{
  "name": "image-name",
  "sourceSnapshot": "/source-project-id/global/snapshots/source-snapshot",
  "storageLocations": "location"
}

Substitua o seguinte:

  • project-id: o projeto que contém a imagem.
  • image-name: um nome para a nova imagem que você quer criar.
  • source-snapshot: o snapshot que você quer usar como base para criar a imagem.
  • source-project-id: uma variável opcional que especifica em que projeto o snapshot está localizado. É necessário ter permissão para acessar o recurso de snapshot nesse projeto.
  • location: um parâmetro opcional que permite selecionar o local de armazenamento da imagem. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.

Para mais informações sobre como adicionar imagens, consulte a referência de imagens (em inglês).

Como suspender o uso de uma imagem

O Compute Engine permite suspender o uso de uma imagem personalizada de sua propriedade definindo o status de suspensão de uso dela. Cada status de suspensão de uso gera uma resposta diferente do servidor, o que facilita a transição dos usuários das imagens não compatíveis de uma maneira gerenciável. Use o console, o comando gcloud ou o método da API Compute Engine para suspender o uso de uma imagem.

Estados de suspensão de uso

Os estados de suspensão de uso abaixo são compatíveis:

  • ACTIVE: a imagem está ativa e pode ser usada normalmente. As famílias de imagens apontam para a imagem mais recente e ativa em uma família.
  • DEPRECATED: a imagem está marcada como obsoleta, mas ainda pode ser usada. Se usar uma imagem obsoleta, a solicitação será realizada com um aviso. Novos links para essa imagem são permitidos. As famílias de imagens não apontam mais para essa imagem, mesmo que ela seja a mais recente da família.
  • OBSOLETE: a imagem está marcada como obsoleta e não está mais disponível para uso. Ao tentar usar essa imagem em uma solicitação, uma mensagem de erro será retornada. Links atuais para essa imagem ainda são permitidos.
  • DELETED: esta imagem foi excluída. Ao tentar usar uma imagem excluída, uma mensagem de erro será retornada.

É possível reverter uma suspensão de uso (ativar uma imagem novamente) alterando o estado de suspensão de uso para ACTIVE.

Console

  1. No Console do Google Cloud, acesse a página Imagens.
    Acessar a página "Imagens"
  2. Marque a caixa à esquerda da imagem que você quer suspender o uso.
  3. Clique em Suspender o uso na parte superior da página. O uso da imagem será suspenso.

gcloud

Use o comando gcloud compute images deprecate para definir o status de suspensão de uso de uma imagem.

gcloud compute images deprecate image-name \
    --state state \
    --replacement replacement

Substitua o seguinte:

  • image-name: o nome da imagem que você quer suspender o uso.
  • state: o estado de suspensão de uso.
  • replacement: a imagem para substituir a que teve o uso suspenso.

API

Faça uma solicitação POST ao método images().deprecate. Especifique o nome da imagem que você quer suspender.

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/resource-id/deprecate

{
  "state": "state",
  "replacement": "replacement"
}

Substitua o seguinte:

  • project-id: o projeto que contém a imagem.
  • resource-id: o nome da imagem que vai ter o uso suspenso.
  • state: o estado de suspensão de uso deste recurso.
  • replacement: a imagem para substituir a que teve o uso suspenso.

Como excluir uma imagem

Somente é possível excluir imagens personalizadas que foram adicionadas por você ou alguém que tenha acesso ao projeto. Use o console, o comando gcloud ou o método da API Compute Engine para excluir a imagem.

Console

  1. No Console do Google Cloud, acesse a página Imagens.
    Acessar a página "Imagens"
  2. Marque a caixa à esquerda da imagem que você quer excluir.
  3. Clique em Excluir na parte superior da página. A imagem será excluída.

gcloud

Use o comando gcloud compute images delete (em inglês) para excluir uma imagem. Substitua image-name pelo nome da imagem a ser excluída.

gcloud compute images delete image-name

API

Faça uma solicitação POST para o método images().delete (em inglês). Especifique o nome da imagem que você quer excluir.

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/resource-id

Substitua o seguinte:

  • project-id: o projeto que contém a imagem.
  • resource-id: o nome da imagem que você quer excluir.

Como definir versões em uma família de imagens

Use as famílias de imagens para simplificar a criação de versões de imagens. Adicione uma imagem a uma família para defini-la como a versão mais recente. Se você determinar que é preciso reverter a família para uma versão anterior da imagem, suspenda o uso da imagem mais recente da família.

Para ver as práticas recomendadas para trabalhar com famílias de imagens, consulte Práticas recomendadas para famílias de imagens.

Se preferir, especifique o local de armazenamento da imagem, usando o console, o comando gcloud compute images create com a sinalização --storageLocation ou o método images().insert da API.

Por exemplo, crie uma imagem chamada image-v1 como parte de uma família.

Console

  1. No Console do Google Cloud, acesse a página "Criar uma imagem".
    Acessar a página "Criar uma imagem"
  2. Especifique o Nome da imagem.
  3. Especifique a origem da qual você quer criar uma imagem. Pode ser um disco permanente, um snapshot, outra imagem ou um arquivo disk.raw no Google Cloud Storage.
  4. Especifique o local em que você armazenará sua imagem. Escolha o local de armazenamento da imagem no menu suspenso Com base na localização do disco de origem (padrão). Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não fizer uma seleção, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem da imagem.

  5. Especifique as propriedades da imagem. Por exemplo, é possível especificar o nome da família my-image-family para que sua imagem organize essa imagem como parte de uma família de imagens.

  6. Se você está criando uma imagem de um disco anexado a uma imagem em execução, marque "Forçar criação de instâncias em execução" para confirmar que quer criar a imagem durante a execução da instância.

  7. Clique em Criar para criar a imagem.

gcloud

gcloud compute images create image-v1 \
    --source-disk disk-1 \
    --source-disk-zone us-central1-f \
    --family my-image-family

A família de imagens aponta para image-v1. Adicione uma segunda imagem à família:

gcloud compute images create image-v2 \
    --source-disk disk-2 \
    --source-disk-zone us-central1-f \
    --family my-image-family

API

Faça uma solicitação POST ao método images().insert. Especifique a família de imagens no corpo da solicitação.

POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images

{
  "name": "image-v2",
  "sourceDisk": "/zones/us-central1-f/disks/disk-2",
  "family":"my-image-family",

}

A família de imagens aponta para image-v2 porque é a imagem mais recente adicionada à família.

gcloud

Execute o comando gcloud compute images describe-from-family (em inglês) para ver a que imagem uma família aponta.

Por exemplo:

gcloud compute images describe-from-family my-image-family

family: my-image-family
id: '8904691942610171306'
kind: compute#image
name: image-v2
selfLink: https://compute.googleapis.com/compute/v1/projects/my-project/global/images/image-v2
sourceDisk: https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v2
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY

API

Faça uma solicitação GET ao método images().getFromFamily. Especifique a família de imagens no corpo da solicitação.

GET https://compute.googleapis.com/compute/v1/projects/project-id/global/images/family

{
  "resourceId":"my-image-family",

}

Se você determinar que precisa reverter a família de imagens para que ela não aponte mais para image-v2, suspenda o uso de image-v2. Desse modo, a família apontará novamente para image-v1.

gcloud compute images deprecate image-v2 \
    --state DEPRECATED \
    --replacement image-v1

Verifique se a família de imagens está apontando para image-v1.

gcloud compute images describe-from-family my-image-family

family: my-image-family
id: '2741732787056801255'
kind: compute#image
name: image-v1
selfLink: https://compute.googleapis.com/compute/v1/projects/my-project/global/images/image-v1
sourceDisk: https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v1
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY

Como ativar os recursos do sistema operacional convidado nas imagens personalizadas

Os recursos do sistema operacional convidado permitem que você configure as seguintes opções de rede, segurança, armazenamento e sistema operacional em imagens personalizadas que também serão usadas como discos de inicialização:

  • Sub-redes com vários IPs: para configurar interfaces com uma máscara de rede diferente de /32.
  • Compatibilidade UEFI: para inicialização com firmware UEFI e os seguintes recursos de VM protegida:
  • SCSI multifilas em dispositivos SSD locais como alternativa ao NVMe:
    • Para imagens do Linux, é possível ativar o SCSI multifilas em dispositivos SSD locais em imagens com versões de kernel 3.17 e posteriores.
    • Para imagens do Windows, é possível ativar o SCSI multifilas em dispositivos SSD locais em imagens com a versão do driver 1.2.0.1621 ou superior.
  • Suporte do Windows: identifique as imagens de inicialização personalizadas do Windows Server como imagens do Windows.

gcloud

Use o comando gcloud compute images create com a sinalização --guest-os-features para criar uma nova imagem personalizada a partir de uma imagem personalizada existente.

gcloud compute images create IMAGE_NAME --source-image SOURCE_IMAGE --source-image-project IMAGE_PROJECT --guest-os-features="FEATURES,..." --storage-location LOCATION

Substitua o seguinte:

  • IMAGE_NAME: nome da nova imagem.
  • SOURCE_IMAGE: imagem que servirá como base para a nova.
  • IMAGE_PROJECT: opcional: projeto que contém a imagem de origem. Use esse parâmetro para copiar uma imagem de outro projeto.
  • FEATURES: IDs, separados por vírgulas, dos recursos do SO convidado que serão ativados para a imagem. Defina como um ou mais dos tipos a seguir: MULTI_IP_SUBNET, UEFI_COMPATIBLE, VIRTIO_SCSI_MULTIQUEUE, WINDOWS.
  • LOCATION: opcional: região ou multirregião para armazenar a imagem. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não especificar, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem dela.

API

Use o método images().insert com a sinalização guestOsFeatures para criar uma nova imagem personalizada a partir de uma imagem personalizada existente.


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

{
 "name": "IMAGE_NAME",
 "sourceImage": "projects/IMAGE_PROJECT/global/images/SOURCE_IMAGE",
 "storageLocations": "LOCATION",
 "guestOsFeatures": [
  {
   "type": "FEATURES"
  }
 ]
}

Substitua o seguinte:

  • PROJECT_ID: ID do projeto em que a nova imagem será criada.
  • IMAGE_NAME: nome da nova imagem.
  • SOURCE_IMAGE: imagem que servirá como base para a nova.
  • IMAGE_PROJECT: opcional: projeto que contém a imagem de origem. Use esse parâmetro para copiar uma imagem de outro projeto.
  • LOCATION: opcional: região ou multirregião para armazenar a imagem. Por exemplo, especifique us para armazenar a imagem na multirregião us ou us-central1 para armazená-la na região us-central1. Se você não especificar, o Compute Engine armazenará a imagem na multirregião mais próxima do local de origem dela.
  • FEATURES: IDs, separados por vírgulas, dos recursos do SO convidado que serão ativados para a imagem. Defina como um ou mais dos tipos a seguir: MULTI_IP_SUBNET, UEFI_COMPATIBLE, VIRTIO_SCSI_MULTIQUEUE, WINDOWS.

A seguir