Converter de uma AMI com armazenamento de instâncias em uma AMI baseada no Amazon EBS - Amazon Elastic Compute Cloud

Converter de uma AMI com armazenamento de instâncias em uma AMI baseada no Amazon EBS

É possível converter uma AMI do Linux com armazenamento de instâncias em uma AMI do Linux baseada no Amazon EBS.

Importante

Não é possível converter uma AMI que não lhe pertença.

Para converter uma AMI com armazenamento de instâncias em uma AMI baseada no Amazon EBS
  1. Execute uma instância do Amazon Linux a partir de uma AMI baseada no Amazon EBS. Para ter mais informações, consulte Iniciar uma instância usando o novo assistente de inicialização de instância, versão beta. As instâncias do Amazon Linux têm a AWS CLI e as ferramentas da AMI pré-instaladas.

  2. Carregue a chave privada X.509 usada para empacotar sua AMI com armazenamento de instâncias para sua instância. Usamos essa chave para garantir que só você e o Amazon EC2 possam acessar sua AMI.

    1. Crie um diretório temporário na sua instância para a chave privada X.509 da seguinte forma:

      [ec2-user ~]$ mkdir /tmp/cert
    2. Copie a chave privada X.509 do seu computador para o diretório /tmp/cert na sua instância usando uma ferramenta de cópia segura, como a scp. O parâmetro my-private-key no comando a seguir é a chave privada que você usa para se conectar à sua instância com o SSH. Por exemplo:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00
  3. Configure as variáveis de ambiente para usar o AWS CLI. Para obter mais informações, consulte Criar um par de chaves.

    1. (Recomendado) Defina as variáveis de ambiente para sua chave de acesso, chave secreta e token de sessão da AWS.

      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key [ec2-user ~]$ export AWS_SESSION_TOKEN=your_session_token
    2. Defina as variáveis de ambiente para sua chave de acesso da AWS e uma chave secreta.

      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
  4. Prepare um volume do Amazon Elastic Block Store (Amazon EBS) para sua nova AMI.

    1. Crie um o volume do EBS vazio na mesma zona de disponibilidade que sua instância usando o comando create-volume. Observe o ID do volume na saída do comando.

      Importante

      Esse volume do EBS deve ter tamanho igual ou superior ao volume do dispositivo raiz do armazenamento de instâncias original.

      [ec2-user ~]$ aws ec2 create-volume --size 10 --region us-west-2 --availability-zone us-west-2b
    2. Associe o volume à sua instância com Amazon EBS usando o comando attach-volume.

      [ec2-user ~]$ aws ec2 attach-volume --volume-id volume_id --instance-id instance_id --device /dev/sdb --region us-west-2
  5. Crie uma pasta para o seu pacote.

    [ec2-user ~]$ mkdir /tmp/bundle
  6. Baixe o pacote para sua AMI com armazenamento de instâncias para /tmp/bundle usando o comando ec2-download-bundle.

    [ec2-user ~]$ ec2-download-bundle -b DOC-EXAMPLE-BUCKET/bundle_folder/bundle_name -m image.manifest.xml -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d /tmp/bundle
  7. Reconstitua o arquivo de imagem do pacote usando o comando ec2-unbundle.

    1. Altere os diretórios para a pasta de pacotes.

      [ec2-user ~]$ cd /tmp/bundle/
    2. Execute o comando ec2-unbundle.

      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
  8. Copie os arquivos da imagem não empacotada para o novo volume do EBS.

    [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
  9. Teste o volume quanto a quaisquer novas partições não empacotadas.

    [ec2-user bundle]$ sudo partprobe /dev/sdb1
  10. Liste os dispositivos de blocos para encontrar o nome do dispositivo para montar.

    [ec2-user bundle]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/sda 202:0 0 8G 0 disk └─/dev/sda1 202:1 0 8G 0 part / /dev/sdb 202:80 0 10G 0 disk └─/dev/sdb1 202:81 0 10G 0 part

    Neste exemplo, a partição a montar é /dev/sdb1, mas o nome do seu dispositivo provavelmente será diferente. Se seu volume não estiver particionado, o dispositivo para montar será semelhante a /dev/sdb (sem um dígito final de partição do dispositivo).

  11. Crie um ponto de montagem para o novo volume do EBS e monte o volume.

    [ec2-user bundle]$ sudo mkdir /mnt/ebs [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
  12. Abra o arquivo /etc/fstab no volume do EBS com seu editor de texto favorito (como o vim ou o nano) e remova todas as entradas dos volumes de armazenamento de instâncias (temporários). Como o volume do EBS é montado em /mnt/ebs, o arquivo fstab é localizado em /mnt/ebs/etc/fstab.

    [ec2-user bundle]$ sudo nano /mnt/ebs/etc/fstab # LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/sdb /media/ephemeral0 auto defaults,comment=cloudconfig 0 2

    Neste exemplo, a última linha deve ser removida.

  13. Desmonte o volume e separe-o da instância.

    [ec2-user bundle]$ sudo umount /mnt/ebs [ec2-user bundle]$ aws ec2 detach-volume --volume-id volume_id --region us-west-2
  14. Crie uma AMI a partir do novo volume do EBS, da seguinte forma.

    1. Crie um snapshot do novo volume do EBS.

      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id volume_id
    2. Verifique se seu snapshot está concluído.

      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snapshot_id
    3. Identifique a arquitetura do processador, o tipo de virtualização e a imagem do kernel (aki) usados na AMI original com o comando describe-images. Para esta etapa, você precisa do ID da AMI com armazenamento de instâncias original.

      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-id --output text IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3 ami-8ef297be amazon available public machine aki-fc8f11cc instance-store paravirtual xen

      Neste exemplo, arquitetura é x86_64 e o ID da imagem do kernel é aki-fc8f11cc. Use os valores a seguir na próxima etapa. Se a saída do comando acima também listar um ID ari, anote isso também.

    4. Registre sua nova AMI com o ID do snapshot do seu novo volume do EBS e os valores da etapa anterior. Se a saída do comando anterior listou um ID ari, inclua-o no comando seguinte com --ramdisk-id ari_id.

      [ec2-user bundle]$ aws ec2 register-image --region us-west-2 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snapshot_id} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
  15. (Opcional) Depois de ter testado que pode executar uma instância a partir da nova AMI, é possível excluir o volume do EBS criado para esse procedimento.

    aws ec2 delete-volume --volume-id volume_id