Como exportar uma imagem personalizada para o Google Cloud Storage

Se você precisar mover os dados do disco de inicialização do Compute Engine para fora do projeto do Compute Engine, exporte uma imagem do disco de inicialização para o Cloud Storage como um arquivo tar.gz. Se você precisar criar uma imagem de disco permanente para usar ao criar discos permanentes novos no Compute Engine, leia Como criar uma imagem personalizada.

Exporte uma imagem personalizada para o Cloud Storage como backup ou para compartilhamento. Esse método é ideal para compartilhar imagens individuais com outros projetos que não tenham acesso às imagens. Outra alternativa é compartilhar imagens concedendo o papel de usuário de imagem do Compute Engine na imagem ou no projeto que a contém.

O diagrama a seguir mostra alguns fluxos de trabalho típicos para a criação e reutilização de uma imagem personalizada.

Exemplos de criação e reutilização de imagens personalizadas
Figura 1. Exemplos de criação e reutilização de imagens personalizadas

Antes de começar

Como exportar uma imagem com um único comando

A maneira mais comum de exportar uma imagem para o Cloud Storage é usar o comando gcloud compute images export. Esse comando usa o Daisy para encadear as várias etapas obrigatórias para exportar uma imagem. Nele, pressupõe-se que você tenha criado uma imagem, por exemplo, com o comando gcloud compute images create.

Usando a ferramenta de linha de comando gcloud, execute:

gcloud compute images export --destination-uri [DESTINATION_URI] \
    --image [IMAGE]

em que:

  • [DESTINATION_URI] é o destino de URI do Cloud Storage para o arquivo de disco virtual exportado;
  • [IMAGE] é o nome da imagem de disco a ser exportada.

Por exemplo, o comando a seguir exporta uma imagem chamada my-image de my-project para um intervalo do Cloud Storage chamado my-bucket. Por padrão, a imagem é exportada como um arquivo disk.raw e é comprimida no formato de arquivo tar.gz.

gcloud compute images export --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image --project my-project

Para uma lista de todas as sinalizações disponíveis, consulte a documentação de referência de gcloud compute images export.

Como criar e exportar uma imagem manualmente

Se os comandos gcloud compute images create e gcloud compute images export não atenderem aos requisitos, será possível criar e exportar uma imagem manualmente a partir de uma instância do Compute Engine. Esse processo tem etapas discretas para criar primeiramente uma imagem e depois exportar uma imagem.

No exemplo a seguir, observe que o disco criado se chama image-disk.

Para criar e exportar uma imagem:

  1. Como opção, interrompa a instância em que o disco está anexado antes de criar o instantâneo. Isso garante a integridade do conteúdo do disco.

  2. Crie um instantâneo do disco. Atribua o nome image-snapshot ao instantâneo.

    gcloud compute disks snapshot [DISK_NAME] --snapshot-names image-snapshot
    

    em que [DISK_NAME] é o nome do disco que você usa para criar o instantâneo.

  3. Use o instantâneo image-snapshot para criar um novo disco chamado image-disk executando o seguinte comando:

    gcloud compute disks create image-disk --source-snapshot image-snapshot
    
  4. Crie um disco temporário chamado temporary-disk para reter o arquivo .tar e especifique o [SIZE] do disco como, no mínimo, 50% maior que o disco de imagens.

    É possível desanexar e excluir o disco depois.

    gcloud compute disks create temporary-disk --size [SIZE]
    

    em que [SIZE] é o tamanho do disco temporário em unidades GB ou TB. Por exemplo, especifique 100GB para criar um disco de 100 gigabytes.

  5. Crie uma instância e ative o escopo storage-rw nela. Além disso, anexe o image-disk e o temporary-disk à instância como discos secundários com atributos device-name específicos.

    gcloud compute instances create [INSTANCE_NAME] --scopes storage-rw \
        --disk name=image-disk,device-name=image-disk \
        --disk name=temporary-disk,device-name=temporary-disk
    

    em que [INSTANCE_NAME] é o nome da instância a ser criada.

    Note que você está transferindo escopos da conta de serviço para fazer upload do arquivo no Google Cloud Storage em etapas posteriores.

    Examine os detalhes sobre como iniciar uma nova instância, se necessário.

  6. Conecte-se à instância:

    gcloud compute ssh [INSTANCE_NAME]
    

    onde [INSTANCE_NAME] é a instância à qual se conectar.

  7. Formate e ative o disco temporário. A formatação do disco exclui o conteúdo do disco temporário.

    sudo mkdir /mnt/tmp
    
    sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
    
    sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
    
  8. Como opção, ative o disco de imagens e faça outras alterações antes de criar o arquivo .tar. Por exemplo, exclua os arquivos atuais do diretório /home se não quiser que eles façam parte da imagem. Ative as partições do disco que precisam ser modificadas, altere os arquivos necessários e desative o disco quando terminar.

    1. Crie um diretório em que será ativado o disco ou a partição.

      sudo mkdir /mnt/image-disk
      
    2. Use o comando ls para determinar o disco ou a partição do disco que você precisa ativar.

      ls /dev/disk/by-id/
      

      O comando imprime uma lista de códigos e partições de disco. Por exemplo, o disco a seguir tem uma tabela de partições com uma partição. O código google-image-disk aponta para o disco cheio do qual você quer criar uma imagem. O código google-image-disk-part1 aponta para a primeira partição desse disco. Ative a partição se for necessário fazer alterações no disco e crie a imagem do disco cheio.

      google-image-disk
      google-image-disk-part1
      
    3. Ative o disco ou a partição. Se o disco tiver uma tabela de partições, ative as partições individuais. Por exemplo, ative google-image-disk-part1.

      sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
      

      Como alternativa, se o disco estiver com formatação bruta sem nenhuma tabela de partições, ative o disco cheio google-image-disk.

      sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
      
    4. Modifique os arquivos do diretório /mnt/image-disk para configurar os arquivos no disco. Por exemplo, remova o arquivo /mnt/image-disk/home/[USER]/.ssh/authorized_keys para impedir que as chaves SSH sejam compartilhadas.

    5. Depois de modificar os arquivos, desative o disco.

      sudo umount /mnt/image-disk/
      
  9. Crie um arquivo .tar da imagem.

    Após personalizar os arquivos no disco de imagens, crie um arquivo do disco bruto no disco temporário. O nome da imagem do disco bruto precisa ser "disk.raw":

    sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
    

    Depois, crie um arquivo .tar e .gzip desse arquivo:

    cd /mnt/tmp
    
    sudo tar czvf myimage.tar.gz disk.raw
    

    Esse comando criará uma imagem da instância no seguinte local:

    /mnt/tmp/myimage.tar.gz
    
  10. Fazer upload da imagem para o Google Cloud Storage

    Para fazer upload do arquivo .tar no Google Cloud Storage, use a ferramenta de linha de comando gsutil que está pré-instalada em sua instância.

    1. Crie um intervalo usando gsutil.

      Verifique as Diretrizes de intervalo e nomenclatura antes de criar o intervalo. Depois, crie o intervalo usando o seguinte comando:

      me@example-instance:~$ gsutil mb gs://[BUCKET_NAME]

      onde [BUCKET_NAME] é o nome do intervalo a ser criado.

    2. Copie o arquivo no novo intervalo.

      me@example-instance:~$ gsutil cp /mnt/tmp/myimage.tar.gz gs://[BUCKET_NAME]

      onde [BUCKET_NAME] é o intervalo para copiar o arquivo.

Pronto, você exportou seu arquivo para o Google Cloud Storage. Agora, é possível compartilhar a imagem com outras pessoas ou usar o arquivo .tar para adicionar uma nova imagem a um projeto no Console do Google Cloud Platform.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine