Skip to main content

Importando Suas Imagens de Outras Clouds

Migrar cargas de trabalho de outros provedores de nuvem para a Magalu Cloud é um cenário comum. Felizmente, as ferramentas de virtualização e nuvem atuais permitem que você exporte suas imagens de VMs já existentes e as prepare para uso em um novo ambiente, desde que você siga os passos corretos.

De forma geral, o processo segue estes passos:

  1. Exportar a imagem no provedor de origem.
  2. Generalizar a imagem para remover dados e configurações específicas.
  3. Converter para o formato QCOW2.
  4. Upload para um bucket da Magalu Cloud.
  5. Gerar URL pré-assinada válida por mais de 12 horas.
  6. Importar a imagem via CLI para a Magalu Cloud.

Veja mais detalhes de pré-reqs e exemplos de importação aqui.

Fluxo de Exportação por Provedor

Cada provedor de nuvem tem seu próprio método para exportar discos virtuais. Embora as ferramentas sejam diferentes, o objetivo é o mesmo: obter um arquivo de imagem que você possa baixar.

1. Amazon Web Services (AWS):

  • Use o VM Import/Export ou crie uma AMI (Amazon Machine Image) a partir de uma instância existente.

  • Exporte a AMI para um bucket no S3 com o comando:

    aws ec2 export-image —-image-id <ami-id> —-disk-image-format VMDK —s3-export-location $3
  • Faça o download da imagem exportada para sua máquina.

2. Microsoft Azure:

  • Crie um snapshot do disco gerenciado.

  • Gere uma URL SAS temporária para o VHD.

  • Baixe o VHD com o AzCopy:

    azcopy copy “<sas-url>" ./disk.vhd

    Download a Linux VHD from Azure

3. Google Cloud Platform (GCP):

  • No GCP, a forma mais comum é exportar um disco virtual a partir de um snapshot. Você pode usar a CLI com o comando gcloud compute images export para exportar o disco para um bucket do Google Cloud Storage (GCS), de onde poderá baixá-la.

Exemplo de Migração: GCP -> Magalu Cloud

Neste exemplo, criamos uma VM na GCP com o Ubuntu 24.04 e instalamos o gerenciador de containers Incus nesta imagem (sudo apt install \-y incus).

Passo 1: Preparar a imagem

  • Antes de exportar, generalize a VM para remover dados específicos da GCP que poderiam causar conflitos. Isso garante que a imagem seja "limpa" e se configure corretamente na Magalu Cloud.

  • Para generalizar a imagem, é necessário remover chaves SSH do host e do usuário, limpar logs do cloud-init e históricos em geral.

    Atenção

    Remova o arquivo /etc/cloud/cloud.cfg.d/91-gce.cfg, que força o cloud-init a usar apenas metadados da GCP. Sem isso, a VM não inicializará na Magalu Cloud.

    Os comandos a serem executados para generalizar uma imagem Ubuntu na GCP são:

    # Remove SSH keys, logs, and temp data.
    $ sudo rm -f /etc/ssh/ssh_host_*
    $ sudo rm -f /root/.ssh/authorized_keys /home/ubuntu/.ssh/authorized_keys
    $ sudo rm -rf /tmp/* /var/tmp/* /var/lib/cloud/seed/nocloud-net/
    # Clean cloud-init logs
    $ sudo cloud-init clean --logs
    # Clean the /etc/machine-id files
    $ sudo sh -c 'echo -n > /etc/machine-id && rm -f /var/lib/dbus/machine-id'
    # Clean apt downloaded packages
    $ sudo apt-get clean
    $ sudo rm -rf /var/lib/apt/lists/*
    # Remove bash history
    $ sudo rm -f /root/.bash_history /home/ubuntu/.bash_history
    # Purge Google Cloud-specific packages (recommended)
    $ sudo rm /etc/cloud/cloud.cfg.d/91-gce.cfg
    $ sudo apt-get purge -y google-guest-agent google-compute-engine
    # Now, power off the VM.
    $ sudo systemctl poweroff
    Importante

    Para garantir a integridade da imagem, desligue completamente a máquina virtual antes de iniciar o processo de exportação. Esse processo pode ser feito tanto através dos comandos (como mostrado acima) ou através do Console ou CLI da GCP.

Passo 2: Exportar a imagem no GCP

Com a sua VM preparada e desligada, você pode usar a ferramenta de linha de comando gcloud ou o Console para exportar a imagem. Nesse exemplo iremos demonstrar o processo através da CLI.

  • Criar a Imagem gerenciada no GCP a partir do disco da sua VM:

    gcloud compute images create <image name> --source-disk <vm source disk> --source-disk-zone <zone> --family <family name> --storage-location <region> 
    Created
  • Exporte a Imagem do gerenciamento do GCP para um bucket do Google Cloud Storage (GCS):

    gcloud compute images export --destination-uri gs://<destination-bucket>/<image-name>.tar.gz --image <image-name>

    Obs: A imagem exportada virá em formato tar.gz, contendo um arquivo de disco raw.

  • Baixe o arquivo para sua máquina local: Esse procedimento é necessário pois precisamos exportar a imagem do arquivo .tar.gz para que possamos converter a imagem para o formato qcow2.

    gcloud storage cp gs://<bucket-name>/<image-name>.tar.gz .

Passo 3: Converter e preparar para importação

Uma vez que o arquivo da imagem está em sua máquina local, ele precisa ser convertido e depois transferido para a Magalu Cloud.

  • O arquivo exportado da GCP está no formato raw.

  • Em outros Provedores de Cloud o formato pode ser .ova, .vdmk, .vdi, entre outros.

  • Para a Magalu Cloud, ele precisa ser convertido para .qcow2, que é otimizado para ambientes de virtualização.

  • Você pode usar a ferramenta qemu-img para isso.

  • Primeiro, extraia o arquivo raw do tar.gz e depois use o comando qemu-img convert, especificando o formato de origem (nesse caso \-f raw) e o de destino (\-O qcow2):

    tar -xvf <image-name>.tar.gz
    qemu-img convert -f raw -O qcow2 disk.raw disk.qcow2

Passo 4: Upload para a Magalu Cloud

  • O comando mgc os objects upload é utilizado para transferir o arquivo local para um bucket no OBJS:

    mgc os objects upload --dst='<bucekt>/<nome-da-imagem>.qcow2' --src='disk.qcow2' --region <bucket-region>
  • Gere uma URL pré-assinada válida (>12h)

  • Utilize o comando mgc os objects presign, especificando o destino e o tempo de expiração (\--expires-in).

    Atenção

    É crucial que a URL tenha um prazo de validade maior que 12 horas para que o processo de importação não expire.

    mgc os objects presign --dst='<bucket>/<nome-da-imagem>.qcow2' --expires-in="24h" --region <bucket-region>

Passo 5: Importar a imagem

mgc vm images custom create \                                                                        
--name="<image-name>" \
--architecture="x86/64" \
--license="unlicensed" \
--platform="linux" \
--url="https://<region>.magaluobjects.com/<bucket>/<image-name>.qcow2?<signature-hashes>"
id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • Após iniciar a importação, o status da imagem será importing.

  • Você pode monitorar o progresso com o comando mgc vm images custom get.

  • O processo pode levar alguns minutos, dependendo do tamanho do arquivo.

  • Quando o status mudar para active, a imagem estará pronta para uso.

    Exemplo:

    mgc vm images custom get <image-id>                               
    id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    license: unlicensed
    metadata:
    uefi: "false"
    name: <image-name>
    platform: linux
    requirements:
    disk: 10
    ram: 1
    vcpu: 1
    status: active

Passo 6: Criar a instância e validar

  • A etapa final do processo é o lançamento de uma nova instância utilizando a imagem recém-criada.

  • Crie a VM a partir da imagem:

    mgc vm instances create --name="<vm-name>" --image.id=<image-id>' --machine-type.name="<machine-type>" --ssh-key-name="<keypair-name>"
    id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Dica

    Nos logs da instância, você deve ver o cloud-init injetando sua chave SSH (como no exemplo abaixo). Isso confirma que a migração foi bem-sucedida, conforme imagem abaixo.

    Imagem importada do GCP com sucesso
Importante

Para garantir que sua imagem esteja compatível com a plataforma revise os Pré-requisitos obrigatórios de importação. Para otimizar desempenho, segurança e manutenção das suas imagens, consulte também o Guia de Boas Práticas de Imagens Customizadas.