Instance StoreタイプのインスタンスからEBS backed AMIを作ってみた
稼働しているInstance StoreタイプのインスタンスからEBS backed AMIを作ってみた。
発端
#jawsug でこんな質問を見かけた。
@ayakomuroさんが↓のリンクを張ってたので、読んでみると
http://stackoverflow.com/questions/2082724/amazon-ec2-swap-root-instance-store-device-with-ebs-device
- 動いているInstance Storeタイプインスタンスにrootと同じサイズのボリュームをattach
- ddで動いてるシステムの/dev/sda1をEBSボリュームにぶっこむ
- なぁにfsckしておけば問題ない
という大変男気あふれるメソッドでした。いや、たぶん動くけどちょっと怖いかもね。
では、どうするか
EC2 AMI Toolsのec2-create-volコマンドを使うと、中間ファイルとしてimageファイルが出来るので、それを使ってAMIを作ってみる。
使用したのは、RIghtScaleのAMI(ami-aee842af : rightscale-ap-northeast/RightImage_CentOS_5.4_i386_v5.6.28.manifest.xml)
ログイン後、X.509の証明書をコピーして、
# ec2-bundle-vol --cert ~/cert.pem --privatekey ~/pk.pem --user 123456789012 Please specify a value for arch [i386]: Copying / into the image file /tmp/image... Excluding: /sys /proc /dev/pts /proc/sys/fs/binfmt_misc /dev /media /mnt /proc /sys /tmp/image /mnt/img-mnt 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.023326 seconds, 45.0 MB/s mke2fs 1.39 (29-May-2006) :
しばし待つと、/tmp/image というファイルが出来上がるので、同容量のEBSボリュームを(例えば/dev/sdf等に)attachし、
# dd if=/dev/sda1 of=/dev/sdf
として内容をコピー。終わったのを確認したら、EC2 API Toolsの入ったマシンから、
$ ec2-create-snapshot vol-xxxxxxxx (snap-xxxxxxxxが出来るので、COMPLETEDになるのを待って) $ ec2-register -n AMIの名前 -s snap-xxxxxxxx (ami-xxxxxxxxが出来るので) $ ec2-run-instances ami-xxxxxxxx
と、snapshotの作成→AMIの登録→起動をしてみる。
起動しない場合
ec2-get-console-outputなどを活用して、なぜ起動しないか調べる。
AKIやARIを指定しないとちゃんと動かない事もあるので、元になっているAMIのパラメータをよく確認する。