Como criar a imagem de máquina virtual (VM)

Nesta página, você aprende a criar uma imagem de máquina pública para seu produto ser executado no Compute Engine.

Uma imagem contém um carregador de inicialização, um sistema operacional e um sistema de arquivos raiz, necessário à inicialização de uma instância. É possível configurar a imagem com um conjunto de apps e serviços para seu produto. A imagem é usada pelos clientes para iniciar uma instância de máquina virtual (VM) na nuvem.

Recomendamos começar criando uma imagem no projeto de desenvolvimento e movê-la para o projeto público depois que o engenheiro de parceiros do Google a tiver verificado.

Antes de começar

  1. Faça o download do SDK do Google Cloud.

Crie a VM do produto base

Para criar uma imagem de máquina personalizada para o Cloud Marketplace, você precisa concluir estas etapas (descritas nas seções a seguir):

  • Use uma das imagens públicas base compatíveis do Google para criar uma VM e instalar os pacotes específicos do aplicativo e as configurações.

    É possível escolher uma imagem que usa processadores Arm ou x86. Também é possível incluir várias imagens, segmentando diferentes tipos de máquinas, em um produto de VM. Para mais informações sobre plataformas de CPU e os tipos de máquina compatíveis, consulte Plataformas de CPU.

  • Se você pretende oferecer suporte aos clientes, instale scripts para recuperar as credenciais de usuário do app.

Criar uma imagem de VM licenciada

  1. Use o gcloud para definir padrões da Google Cloud CLI:

    gcloud config set project <project_id>
    gcloud config set compute/zone <zone>
  2. Crie uma instância principal que será usada para instalar o software e, posteriormente, convertida em uma imagem para usar no Cloud Marketplace. Para mais informações sobre como criar uma instância, consulte Como criar e iniciar uma instância.

    gcloud compute instances create ${INSTANCE} --scopes
    https://www.googleapis.com/auth/cloud-platform 
  3. Instale e personalize seu software. Inclua todos os scripts de inicialização necessários, como aqueles para criar credenciais de autorização.

    Para criar credenciais de autorização usando senhas aleatórias seguras, siga as etapas em Como criar credenciais de autorização, na seção a seguir.

    Depois de criar e personalizar a instância principal, prepare o disco necessário para criar uma imagem de VM.

  4. Limpe o disco. A criação de uma imagem de VM diretamente da VM também transfere os diretórios de usuário e as chaves SSH para as VMs dos clientes. Portanto, limpe o disco de entrada ao criar a imagem de VM.

    Para limpar o disco:

    1. No menu Instâncias de VM do Compute Engine, clique no nome da instância que você quer limpar e em Editar.

    2. Role para baixo, desmarque a caixa de seleção Excluir disco de inicialização quando a instância for excluída e clique em Salvar. Use o disco para criar a imagem.

    3. Exclua a VM preservando o disco. Você vai precisar confirmar a exclusão. Não selecione Também excluir disco de inicialização.

    4. Em seguida, você precisa criar uma nova instância de VM. Abra as opções Gerenciamento, disco, redes, chaves SSH.

    5. Em disco, anexe o disco da instância anterior como um disco de dados adicional. Verifique se a opção Manter disco está selecionada para Ao excluir uma instância.

      Já é possível aplicar SSH à instância e remover todos os diretórios iniciais ou outros arquivos temporários criados durante o processo de instalação do software. É preciso montar o disco de dados antes de acessá-lo. Para mais informações sobre como montar discos, consulte Como adicionar ou redimensionar discos permanentes.

    6. Quando terminar, desligue e exclua a instância preservando o disco de dados atualizado. Agora, é possível concluir os passos a seguir para criar uma imagem de VM.

  5. Siga as etapas abaixo para conseguir o nome da licença do seu produto de VM no Portal do Produtor:

    1. Abra o Portal do Produtor no Console do Google Cloud:

      https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
      

      Substitua YOUR_PROJECT_ID pelo ID do projeto público ou de desenvolvimento. Recomendamos começar criando uma imagem no projeto de desenvolvimento e movê-la para o projeto público depois que o Engenheiro de parceiros do Google tiver verificado a imagem.

    2. Clique no nome do seu produto.

    3. Acesse a seção Pacote de implantação. Em Licença de VM, anote o nome. Use esse nome de licença na próxima etapa, ao criar a imagem.

  6. Crie uma imagem licenciada executando o seguinte comando gcloud:

    gcloud compute images create CREATE_IMAGE_NAME \
     --project PUBLIC_PROJECT_NAME \
     --source-disk projects/DEV_PROJECT_NAME/zones/SOURCE_DISK_ZONE/disks/SOURCE_DISK_NAME \
     --licenses LICENSE_NAME \
     --description ADD_DESCRIPTION

    Substitua:

    • CREATE_IMAGE_NAME: o nome da imagem e as arquiteturas de CPU com suporte, no formato who-vmOS-image-architecture-date, substituindo architecture por Arm ou x86_64, dependendo da arquitetura de CPU com suporte da imagem. Você precisa usar um nome novo e exclusivo sempre que atualizar a imagem do seu produto.

    • PUBLIC_PROJECT_NAME: o ID do projeto público do Cloud Marketplace. Você precisa ter recebido o papel de Administrador do Compute Storage (roles/compute.storageAdmin) para este projeto.

    • LICENSE_NAME: o nome da licença do produto de VM anotado na etapa anterior.

    • DEV_PROJECT_NAME: o ID do projeto criado para desenvolvimento e teste no Cloud Marketplace. Você precisa ter o papel de Usuário de imagens do Compute (roles/compute.imageUser) para este projeto.

    • SOURCE_DISK_ZONE: a zona do disco de origem.

    • SOURCE_DISK_NAME: o nome do disco de origem.

    • ADD_DESCRIPTION: uma descrição textual opcional da imagem que está sendo criada.

Tornar a imagem pública

Para produtos que não são do Terraform e que não usam imagens do Marketplace, é necessário disponibilizar a imagem publicamente para que os clientes possam implantá-la nas instâncias do Compute Engine. Para tornar a imagem pública, use o console do Google Cloud ou a Google Cloud CLI:

Console

  1. No projeto público, no Compute Engine, acesse a página "Imagens".

    Acessar a página "Imagens"

  2. Selecione a imagem, conforme mostrado abaixo:

  3. Se você não vir um painel de informações no canto superior direito, clique em Mostrar painel de informações.

  4. No painel de informações, no campo Adicionar membros, digite allAuthenticatedUsers e, no menu Selecione uma função, selecione Computar usuário de imagem.

  5. Clique em Adicionar para tornar a imagem pública.

Linha de comando

Use o seguinte comando gcloud no Cloud Shell ou na sua máquina local:

gcloud compute images add-iam-policy-binding IMAGE_NAME --member=allAuthenticatedUsers --role=roles/compute.imageUser

Criar credenciais de autorização

Se o produto for uma implantação simples de uma única instância de VM com regras básicas de firewall, será possível incluir automaticamente uma senha aleatória segura ao configurar o pacote de implantação diretamente.

Se você planeja criar seu pacote de implantação usando a ferramenta mpdev de código aberto, que é recomendada para a maioria dos casos de uso, use mpdev para incluir automaticamente várias senhas aleatórias seguras.

Para conferir as etapas de criação de credenciais de autorização, consulte Como criar seu pacote de implantação.

Depois que o produto for implantado, para conferir os valores de todas as senhas que você criou, use o seguinte comando na instância de VM:

curl -H "Metadata-Flavor: Google" \
http://metadata/computeMetadata/v1/instance/attributes/PASSWORD_NAME

Testar a imagem da VM

Crie uma instância de VM com sua imagem recém-criada e verifique a funcionalidade.

Além disso, para verificar o código de licença, aplique SSH à instância e verifique se as licenças válidas estão anexadas:

curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/licenses/?recursive=true

Verifique se o Python 2.6 ou posterior está instalado:

python -V

Verifique se os pacotes a seguir estão instalados:

gcloud --version
ssh -V
ps aux | grep sshd
curl -V
ps aux | grep dhcp

Verifique se não há outros diretórios de usuário instalados na instância, exceto o seu, e se não há nenhum diretório e credencial de usuário restante além dos seus.