2010年1月22日金曜日

Migrating a CentOS S3 Based AMI to an EBS Based AMI

スズキです。

ずっとやりたかったことが、ようやくできました!

下記のような、S3ベースのAMIイメージから、
http://blog.suz-lab.com/2010/01/suz-lab-centos-ami-542_19.html
EBSベースのAMIイメージを作成しました。

AMIイメージのManifestは下記の通りです。
811118151095/suz-lab_ebs_centos-core-5.4.4
("suz-lab"で検索したら見つかると思います)

ということで作り方ですが、下記サイトの情報を参考にしました。
http://coderslike.us/2009/12/07/amazon-ec2-boot-from-ebs-and-ami-conversion/

まず適当なインスタンスを立ち上げ、ログインし、
"ec2-api-tools"が利用できるように、環境変数の設定です。

# export EC2_HOME=/opt/ec2-api-tools
# export JAVA_HOME=/usr/java/default

次に、S3上のイメージファイル群"us-east-1.ami.suz-lab.com/ami-centos-core-5.4.3.img..."
を"/mnt"以下にダウンロードします。

# ec2-download-bundle \
-a AAAAAAAA \
-s SSSSSSSS \
-k /mnt/pk.pem \
-b us-east-1.ami.suz-lab.com \
-p ami-centos-core-5.4.3.img \
-d /mnt

そして、一つのイメージにします。

# ec2-unbundle \
-k /mnt/pk.pem \
-m /mnt/ami-centos-core-5.4.3.img.manifest.xml \
-s /mnt \
-d /mnt

すると、"/mnt/ami-centos-core-5.4.3.img"といったイメージファイルが作成されます。

ここで、管理コンソールやElasticfoxで10GのEBS作って、
作業しているインスタンスに"/dev/sdb1"でアタッチしておきます。

すると、インスタンス上で"/dev/sdb1"が現れるので、以下のようにAMIイメージをコピーします。

# dd if=/mnt/ami-centos-core-5.4.3.img of=/dev/sdb1

コピーが終わったら、次のようにマウントして中身が見れる常態にします。

# mkdir /vol
# mount /dev/sdb1 /vol

その状態で、"/vol/etc/fstab"を以下のように/mntの行を削除した形に修正します。

--------【fstab】--------
/dev/sda1 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
/dev/sda3 swap swap defaults 0 0
--------

修正が終わったら、次のようにのようにアンマウントして、

# umount /vol

管理コンソールやElasticfoxで"/dev/sdb1"をデタッチし、スナップショットを取り、
最終的には、EBSも削除します。

最後に、AMIイメージとして、スナップショットIDを登録します。

./ec2reg \
-K /mnt/pk.pem \
-C /mnt/cert.pem \
-s snap-e9a2e180 \
-a i386 \
-d suz-lab_ebs_centos-core-5.4.3 \
-n suz-lab_ebs_centos-core-5.4.3

以上で、S3ベースのAMIイメージからEBSベースのAMIイメージを作成することができました。

公開(public)したい場合は、管理コンソールにて、
右クリックの"Edit Permissions"で簡単にできます。

Enjoy!

--------
http://www.suz-lab.com

2 コメント:

taku さんのコメント...

カーネルパニックになり、
手動でイメージファイルを再生するのに
参考にさせてもらいました。

ありがとうございます。

suz-lab さんのコメント...

お役にたてて嬉しいです。