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 use processadores Arm ou x86. Também é possível incluir várias imagens, direcionadas a diferentes tipos de máquina, em um produto de VM. Para mais informações sobre plataformas de CPU e os tipos de máquina compatíveis com elas, consulte Plataformas de CPU.

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

Criar uma imagem de VM licenciada

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

    gcloud config set project <project_id>
    gcloud config set compute/zone <zone>
  2. Crie uma instância principal usada para instalar o software e, posteriormente, convertida em uma imagem para uso 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. Será necessário 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. Expanda as opções em Gerenciamento, disco, redes, chaves SSH.

    5. Em disco, anexe o disco da instância anterior como um disco de dados adicional. Verifique se Manter disco está selecionado em 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, durante a criação da 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 a que ela oferece suporte, no formato who-vmOS-image-architecture-date, substituindo architecture por Arm ou x86_64, dependendo da arquitetura de CPU compatível com a 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. É preciso ter o papel Administrador do Compute Storage (roles/compute.storageAdmin) para esse projeto.

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

    • DEV_PROJECT_NAME: o ID do projeto que você criou para desenvolvimento e teste no Cloud Marketplace. É necessário ter o papel Usuário de imagens do Compute (roles/compute.imageUser) para esse 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 não usam imagens do Marketplace, é necessário disponibilizar publicamente para que seus 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 o 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 etapas de criação de credenciais de autorização, consulte Como criar o pacote de implantação.

Depois que o produto for implantado, para receber os valores das 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
gsutil --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.