2014-02-20 4 views
29

Я хотел бы скопировать образ диска работающего экземпляра EC2 (захватить AMI) и импортировать его в виртуальную коробку или в конечном итоге запустить с помощью Vagrant. Я видел, что упаковщик (http://www.packer.io/) позволяет создавать AMI и соответствующие Vagrant ящики для совместной работы, однако работающий экземпляр, который я сейчас выполняю, работает более двух лет и будет трудно реплицироваться.Преобразование Amazon EC2 AMI в виртуальный или бродячий бокс

Я предполагаю, что эта проблема распространена в сообществе devops, однако не нашли решения в моих исследованиях в Интернете. Существуют ли какие-либо инструменты, позволяющие выполнить эту задачу?

+0

Я ищу легко повторяемый/автоматический процесс, если это возможно. –

+0

Для будущих читателей, возможно, попробуйте https://serverfault.com/questions/374861/converting-an-ec2-ami-to-vmdk-image# –

ответ

7

Вы должны export the instance.

Для получения более подробной информации, проверьте: How to export a VM from Amazon EC2 to VMware On-Premise.

Лично я сделал это в окне Windows, установив на экземпляр конвертер VMWare и преобразовывая локальную систему в VMDK. Затем я отправил VMDK на S3.

+0

Экспорт возможен только в том случае, если вы импортировали изначально, не так ли? «Если вы ранее использовали импорт VM для импорта виртуальной машины в Amazon EC2 ...» –

6

Я просто хотел отметить, что @Drewness ответил на этот вопрос в первом комментарии к исходному вопросу. Я просто добавляю этот ответ, чтобы сделать его более понятным, потому что ответ также связан с тегом привязки. Ссылка указывает на следующую страницу: How to convert EC2 AMI to VMDK for Vagrant.

Таким образом, в основном вам необходимо включить доступ к корневому SSH, например.

$ 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 

Теперь просто создать VirtualBox VM с VMDK изображения, установленной как первичное загрузочное устройство.

К сожалению, на данный момент я не смог загрузить ядро ​​Amazon Linux в VirtualBox.

Смежные вопросы