Преобразование Amazon EC2 AMI в виртуальный или бродячий бокс
Я хотел бы скопировать образ диска запущенного экземпляра EC2 (захватить AMI) и импортировать его в виртуальную коробку или, в конечном итоге, запустить с помощью Vagrant. Я видел, что упаковщик (http://www.packer.io/) позволяет вам создавать AMI и соответствующие брандмауэры для совместной работы, однако в текущем экземпляре, который я сейчас работает более двух лет и будет трудно воспроизвести.
Я предполагаю, что эта проблема распространена в сообществе devops, однако не нашли решения в моих исследованиях в Интернете. Существуют ли какие-либо инструменты, позволяющие выполнить эту задачу?
Ответы
Ответ 1
Вы должны экспортировать экземпляр.
Для получения дополнительной информации проверьте: Как экспортировать VM из Amazon EC2 в VMware On-Premise.
Лично я сделал это в окне Windows, установив на экземпляр конвертер VMWare и преобразовывая локальную систему в VMDK. Затем я отправил VMDK на S3.
Ответ 2
Я просто хотел заметить, что @Drewness ответил на этот вопрос в первом комментарии к исходному вопросу. Я просто добавляю этот ответ, чтобы сделать его более понятным, потому что ответ также связан с тегом привязки. Ссылка указывает на следующую страницу: Как конвертировать EC2 AMI в VMDK для Vagrant.
Итак, в основном вам нужно включить доступ к SSH для root, например.
$ 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>
Затем скопируйте запущенную систему на образ локального диска:
$ ssh -i ~/.ec2/your_key [email protected] 'dd if=/dev/xvda1 bs=1M | gzip' | gunzip | dd of=./ec2-image.raw
После этого подготовьте файловую систему в новом файле изображения:
$ 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
Теперь вам нужно скопировать все с изображения EC2 на пустой образ:
$ 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/
и установите Grub:
$ cp /usr/lib/grub/x86_64-pc/stage* /mnt/loop/1/boot/grub/
и отключите устройство (umount /dev/loop1
) и преобразуйте образ необработанного диска в образ vmdk:
$ qemu-img convert -f raw -O vmdk vmdk-image.raw final.vmdk
Теперь просто создайте виртуальную виртуальную машину с изображением vmdk, установленным в качестве основного загрузочного устройства.
К сожалению, в этот момент я не смог заставить ядро Amazon Linux загружаться внутри VirtualBox.