Como criar imagens de máquina

Use uma imagem de máquina para armazenar toda a configuração, metadados, permissões e dados de um ou mais discos para uma instância de VM em exibição no Compute Engine. A instância de VM 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.

Nesta página, abordamos as etapas para criar uma imagem de máquina a partir de uma instância de origem.

Antes de começar

Limitações e restrições

Como criar uma imagem de máquina a partir de uma instância

É possível criar imagens de máquina usando o Console do Google Cloud, a ferramenta de linha de comando gcloud ou a API Compute Engine.

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 uma localização, 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 uma chave gerenciada pelo Google, uma chave do Cloud Key Management Service (Cloud KMS) ou uma chave de criptografia fornecida pelo cliente (CSEK, na sigla em inglês). Se nenhuma chave de criptografia for especificada, as imagens de máquina serão criptografadas usando uma chave gerenciada pelo Google.
  • Se você quiser usar uma imagem de máquina para clonar e replicar 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 Google Cloud, acesse a página Imagens de máquina.

    Acesse a página "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 a localização, 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 beta compute machine-images create para criar uma imagem de máquina usando uma instância.

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

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.

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 beta 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/beta/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

API

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"
}

Substitua:

  • PROJECT_ID: o ID do projeto;
  • MACHINE_IMAGE_NAME: o nome da imagem de máquina que você quer criar;
  • SOURCE_INSTANCE_URL: o 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

Como criar uma imagem de máquina de um dispositivo virtual

Ativar a API Cloud Build

Na maioria dos casos, gcloud beta compute machine-images import tenta conceder essas permissões à conta de serviço do Cloud Build. No entanto, é possível concedê-las manualmente para garantir que as permissões necessárias estejam aplicadas.

Console

  1. Ative a API Cloud Build.

    Ativar a API Cloud Build

    Ao ativar a API Cloud Build a partir do Console, o Compute Engine concede à conta de serviço do Cloud Build os papéis a seguir para que o serviço possa importar instâncias para o Compute Engine:

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    A ferramenta de importação também usa a conta de serviço padrão do Compute Engine. Por padrão, a conta de serviço do Compute Engine tem o papel de editor de projetos do IAM. Se esse papel for removido, o processo de importação poderá falhar. Para adicionar o papel novamente à conta de serviço, consulte Como conceder acesso. Para mais informações sobre a conta de serviço padrão do Compute Engine, consulte Conta de serviço padrão do Compute Engine.

gcloud

Para configurar o serviço Cloud Build usando a ferramenta de linha de comando gcloud, siga estas etapas:

  1. Ative o Cloud Build.

    gcloud services enable cloudbuild.googleapis.com

    A ferramenta de importação também usa a conta de serviço padrão do Compute Engine. Por padrão, a conta de serviço do Compute Engine tem o papel de editor de projetos do IAM. Se esse papel for removido, o processo de importação poderá falhar. Para adicionar o papel novamente à conta de serviço, consulte Como conceder acesso. Para mais informações sobre a conta de serviço padrão do Compute Engine, consulte Conta de serviço padrão do Compute Engine.

  2. Adicione o papel compute.admin à conta de serviço da API Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. Adicione o papel iam.serviceAccountUser à conta de serviço da API Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. Adicione o papel iam.serviceAccountTokenCreator à conta de serviço da API Cloud Build.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    Substitua:

Requisitos

  • Revise o suporte ao sistema operacional em Suporte a recursos por sistema operacional.
  • Revise os requisitos de dispositivos virtuais e de origem da VM. Consulte os requisitos no tópico de importação de dispositivos virtuais do Compute Engine.
  • Se o projeto em que você quer criar a imagem de máquina tiver uma política de imagem confiável definida, adicione projects/compute-image-tools à lista de editores permitidos.

Como criar uma imagem de máquina de um dispositivo virtual

Para criar imagens de máquina de dispositivos virtuais, basta usar a ferramenta de linha de comando gcloud ou a API Compute Engine.

gcloud

Use o comando gcloud beta compute machine-images import para criar uma imagem de máquina usando dispositivos virtuais.

gcloud beta compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:PATH_TO_VIRTUAL_APPLIANCE_FILE
    --os=OS

Substitua:

  • MACHINE_IMAGE_NAME: o nome da imagem de máquina que você quer criar;
  • PATH_TO_VIRTUAL_APPLIANCE_FILE: o caminho para o arquivo OVA ou OVF no Cloud Storage;
  • OS: o sistema operacional do arquivo OVA. Essa sinalização é opcional por padrão, mas pode ser necessária em alguns casos. Recomendamos que você a forneça.

Exemplo

Por exemplo, é possível usar o comando gcloud a seguir para criar uma imagem de máquina chamada my-machine-image usando um arquivo OVA de origem nomeado my-ova que está armazenado no diretório gs://my-bucket e executa centos-7:

gcloud beta compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

API

  1. Faça upload do dispositivo virtual para o Cloud Storage.

  2. Na API, crie uma solicitação POST para a API Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout":"TIMEOUT",
     "steps":[
       {
         "args":[
           "-machine-image-name=MACHINE_IMAGE_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-client-id=api",
           "-timeout=TIMEOUT"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":"gce-ovf-machine-image-import"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que você quer importar o arquivo OVA;
    • TIMEOUT: o tempo máximo de duração de um build antes de ele falhar com uma mensagem TIMEOUT. Na API, esse período precisa ser especificado em segundos. O valor 7200s funciona na maioria dos cenários;
    • MACHINE_IMAGE_NAME: o nome da imagem de máquina a ser criada. Por exemplo, my-machine-image;
    • SOURCE_URI: o URI do arquivo OVA ou um diretório que contém pacotes OVF armazenados no Cloud Storage. Por exemplo, gs://my-bucket/my-instance.ova;
    • OS: o sistema operacional do arquivo OVA. Por exemplo, ubuntu-1604. Essa sinalização é opcional por padrão, mas pode ser necessária em alguns casos. Recomendamos que você a forneça.

    Para ver outros valores de args que podem ser fornecidos, consulte a seção de sinalizações opcionais na página do GitHub sobre importação do OVF do Compute Engine (em inglês).

Como criar imagens de máquina com modificações de OVF

CPU e memória personalizadas

gcloud

Para modificar a configuração de CPU ou memória especificada no arquivo OVF, siga as etapas da ferramenta de linha de comando gcloud para criar uma imagem de máquina a partir de um dispositivo virtual e especifique as sinalizações --custom-cpu e --custom-memory.

Exemplo

Por exemplo, para criar uma imagem de máquina chamada my-machine-image que tenha as seguintes modificações aplicadas às configurações no arquivo OVF:

  • Sistema operacional: Ubuntu 1404
  • CPU: 2 CPUs
  • Memória: 2048 MB

Execute este comando:

gcloud beta compute machine-images import my-machine-image \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

API

Para modificar a configuração de CPU ou memória especificada no arquivo OVF, siga as etapas da API Compute Engine para criar uma imagem de máquina a partir de um dispositivo virtual e especifique o argumento -machine-type. Esse -machine-type representa um tipo de máquina predefinido ou um tipo personalizado a ser usado.

Exemplo

Por exemplo, para criar uma imagem de máquina chamada my-machine-image que tenha as seguintes modificações aplicadas às configurações no arquivo OVF:

  • Sistema operacional: Ubuntu 1404
  • CPU: 2 CPUs
  • Memória: 2048 MB

Faça a seguinte solicitação para a API Compute Engine. Substitua PROJECT_ID pelo ID do projeto.

{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

Redes personalizadas

gcloud

Para configurar uma rede personalizada, siga as etapas da ferramenta de linha de comando gcloud para criar uma imagem de máquina a partir de um dispositivo virtual e especifique uma sinalização --network. Se a rede estiver configurada com um modo de sub-rede personalizado, você precisará especificar também as sinalizações --subnet e --zone.

Exemplo

Por exemplo, para criar uma imagem de máquina chamada my-machine-image que tenha as seguintes modificações aplicadas às configurações no arquivo OVF:

  • Sistema operacional: Ubuntu 1404
  • Rede: custom-vpc-network
  • Sub-rede company-vpc-us-east1-c
  • Zona: us-east1-c

Execute este comando:

gcloud beta compute machine-images import my-machine-image \
    --os ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

API

Para usar uma rede personalizada, siga as etapas da API Compute Engine para criar uma imagem de máquina a partir de um dispositivo virtual e especifique um argumento -network. Se a rede estiver configurada com um modo de sub-rede personalizado, você precisará especificar também os argumentos -subnet e -zone.

Exemplo

Por exemplo, para criar uma imagem de máquina chamada my-machine-image que tenha as seguintes modificações aplicadas às configurações no arquivo OVF:

  • Sistema operacional: Ubuntu 1404
  • Rede: custom-vpc-network
  • Sub-rede company-vpc-us-east1-c
  • Zona: us-central1-c

Faça a seguinte solicitação para a API Compute Engine. Substitua PROJECT_ID pelo ID do projeto.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

A seguir