web-dev-qa-db-fra.com

Convertir Amazon EC2 AMI en boîte virtuelle ou vagabonde

Je voudrais copier l'image disque d'une instance EC2 en cours d'exécution (saisir l'AMI) et l'importer dans une boîte virtuelle ou éventuellement la faire exécuter à l'aide de Vagrant. J'ai vu que le packer ( http://www.packer.io/ ) vous permet de créer des AMI et des boîtes Vagrant correspondantes pour fonctionner ensemble, mais l'instance en cours d'exécution que j'ai actuellement fonctionne depuis plus de deux ans et serait difficile à reproduire.

J'imagine que ce problème est courant dans la communauté des devops mais je n'ai pas trouvé de solution dans mes recherches en ligne. Existe-t-il des outils qui vous permettent d'accomplir cette tâche?

41
Justin W.

Je voulais juste noter que @ Drewness a répondu à cette question dans le premier commentaire à la question d'origine. J'ajoute simplement cette réponse pour la rendre plus claire, car la réponse est également un lien vers une balise d'ancrage. Le lien pointe vers la page suivante: Comment convertir EC2 AMI en VMDK pour Vagrant .

Donc, fondamentalement, vous devez activer l'accès SSH racine, par exemple.

$ Sudo Perl -i -pe 's/#PermitRootLogin .*/PermitRootLogin without-password/' /etc/ssh/sshd_config
$ Sudo Perl -i -pe 's/.*(ssh-rsa .*)/\1/' /root/.ssh/authorized_keys
$ Sudo /etc/init.d/sshd reload # optional command<br>

Copiez ensuite le système en cours d'exécution sur une image disque locale:

$ ssh -i ~/.ec2/your_key [email protected] 'dd if=/dev/xvda1 bs=1M | gzip' | gunzip | dd of=./ec2-image.raw

Après cela, préparez un système de fichiers sur un nouveau fichier image:

$ dd if=/dev/zero of=vmdk-image.raw bs=1M count=10240 # create a 10gb image file
$ losetup -fv vmdk-image.raw # mount as loopback device
$ cfdisk /dev/loop0 # create a bootable partition, write, and quit
$ losetup -fv -o 32256 vmdk-image.raw # mount the partition with an offset
$ fdisk -l -u /dev/loop0 # get the size of the partition
$ mkfs.ext4 -b 4096 /dev/loop1 $(((20971519 - 63)*512/4096)) # format using the END number

Vous devez maintenant tout copier de l'image EC2 vers l'image vide:

$ losetup -fv ec2-image.raw
$ mkdir -p /mnt/loop/1 /mnt/loop/2 # create mount points
$ mount -t ext4 /dev/loop1 /mnt/loop/1 # mount vmdk-image
$ mount -t ext4 /dev/loop2 /mnt/loop/2 # mount AMI-image
$ cp -a /mnt/loop/2/* /mnt/loop/1/

et installez Grub:

$ cp /usr/lib/grub/x86_64-pc/stage* /mnt/loop/1/boot/grub/

et démontez l'appareil (umount /dev/loop1) et convertissez l'image disque brute en une image vmdk:

$ qemu-img convert -f raw -O vmdk vmdk-image.raw final.vmdk

Maintenant, créez simplement une VirtualBox VM avec l'image vmdk montée comme périphérique de démarrage principal.

Malheureusement, à ce stade, je n'ai pas pu faire démarrer le noyau Amazon Linux dans VirtualBox.

10
BillMan

Vous devez exporter l'instance .

Pour plus de détails, consultez: Comment exporter un VM d'Amazon EC2 vers VMware On-Premise .

Personnellement, je l'ai fait sur une boîte Windows en installant VMWare Converter sur l'instance et en convertissant le système local en VMDK. J'ai ensuite posté le VMDK sur S3.

5
John