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のパラメータをよく確認する。