Como exportar uma imagem personalizada para o 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 desse disco para o Cloud Storage como um arquivo tar.gz. Caso precise criar uma imagem de disco permanente para usar durante a criação de novos discos permanentes no Compute Engine, leia Como criar uma imagem personalizada.

É possível exportar 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 suas imagens. Outra alternativa é compartilhar imagens concedendo o papel de usuário de imagens do Compute Engine na imagem ou no projeto que a contém.

No diagrama a seguir, é possível ver alguns fluxos de trabalho típicos para criação e reutilização de uma imagem personalizada.

Como criar e reutilizar 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 preferencial 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. Partimos do princípio que você já criou uma imagem, por exemplo, com o comando gcloud compute images create.

Na 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 é compactada 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 ver 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, crie e exporte uma imagem manualmente a partir de uma instância do Compute Engine. Esse processo tem etapas distintas para primeiro criar uma imagem e depois exportá-la.

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 snapshot. Isso garante a integridade do conteúdo do disco.

  2. Crie um snapshot do disco. Nomeie o snapshot como image-snapshot.

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

    em que [DISK_NAME] é o nome do disco usado para criar o snapshot.

  3. Use o snapshot 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 que o [SIZE] do disco seja pelo menos 50% maior do que o disco de imagem.

    É 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 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 image-disk e 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.

    Observe que você está transferindo os escopos da conta de serviço para poder fazer upload do arquivo para o Cloud Storage nas etapas posteriores.

    Se necessário, analise os detalhes de como iniciar uma nova instância.

  6. Conecte-se à sua 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 o 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 de disco que você precisa ativar.

      ls /dev/disk/by-id/
      

      O comando imprime uma lista de IDs e partições de disco. Por exemplo, o disco a seguir tem uma tabela de partições com uma partição. O ID google-image-disk aponta para o disco completo a partir de que você quer criar uma imagem. O ID google-image-disk-part1 aponta para a primeira partição nesse disco. Ative a partição caso seja necessário fazer alterações no disco e crie a imagem do disco completo.

      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 google-image-disk completo.

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

    5. Quando terminar 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
    

    Em seguida, crie arquivos .tar e .gzip desse arquivo:

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

    Este comando cria uma imagem da instância no seguinte local:

    /mnt/tmp/myimage.tar.gz
    
  10. Faça upload da imagem para o Cloud Storage.

    Para fazer upload do arquivo .tar para o Cloud Storage, use a ferramenta de linha de comando gsutil que vem pré-instalada na instância.

    1. Crie um intervalo usando gsutil.

      Verifique as Diretrizes de intervalo e nomenclatura antes de criar o intervalo. Em seguida, 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]

      em que [BUCKET_NAME] é o intervalo para copiar o arquivo.

Você exportou seu arquivo para o 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