*『CloudBB(http://cloudbb.jp)』アマゾンクラウド技術情報発信サイト
Convert
instance-store AMI into an EBS-booted AMI
概要
インスタンスストアタイプのAMIをEBSタイプのAMIに変換変更する。
前提
該当のEC2インスタンスにEC2 API及びec2-metadataがインストールされていること。ここで設定は必須ではないが、、該当のEC2インスタンスの中ですべての処理が完了でできるメリットがある。る。
EC2 APIインストール
インストール手順は割愛させていただく。手順については『Amazon
Cloudテクニカルガイド―EC2/S3からVPCまで徹底解析、インプレスジャパン』で詳しく説明している。また、以降の作業で必須でもない(簡便になるだけである)。
ec2-metadataインストール
EC2インスタンスの中にEC2のAPIとec2-metadataがインストールされているとする。ec2-metadataは、EC2インスタンスの中で実行し、各種構成情報が取得できる。
ec2-metadata APIの取得は次のように行う。
|
|
ダウンロードしたec2-metadataを確認してパーミションを変更する。
|
# ls -l -rw-r--r-- 1 root
root 10912 Oct 30 2008
ec2-metadata # # ls -l -rwxr-xr-x 1 root
root 10912 Oct 30 2008
ec2-metadata |
/usr/bin/ec2-metadataのように格納する。
|
root@domU-12-31-38-00-9E-46
~]# mv ec2-metadata /usr/bin/ |
タスクとしているAMIは、LAMP Web Starter (AMI Id: ami-2cb05345)である。
/etc/fstabの編集
/etc/fstabをバックアップする。
|
|
上記の/etc/fstabを次のように編集する。EBSタイプAMIのディフォールトではローカルストレージを永続化しない。
|
|
EBSボリューム作成
ブートイメージ格納用のEBSボリュームを作成する。
|
|
EC2インスタンスIDを取得する。ec2-metadataをEC2インスタンスの中から実行する。
|
|
EBSボリュームをアタッチする。
|
|
ブートイメージファイル作成
最新のAMI情報を取得する。
|
# ec2-describe-images …中略 IMAGE ami-3522cc5c
734464703039/cloudbb_20100416 734464703039 available
private
i386 machine
aki-f5c1219c
ari-dbc121b2
instance-store |
バンドルボリュームをダウンロードする。この処理は数分ぐらい時間が掛る。
|
# ec2-download-bundle -b
awk256/myami/20100416 -a AKT0IAIT0ME8QBNFGDEA -s 4I99g8X6Z1xVlDxtIdEkb0r/dcVwD5QhnUoFB5WD -k ~/.ec2/pk-2TGZL5EIFSN0AA7ZHUJZJIZ9XNCEIFHUJH1IH.pem -p cloudbb -d /mnt Downloading manifest
myami/20100416/cloudbb.manifest.xml from awk256 to /mnt/cloudbb.manifest.xml
... Downloading part myami/20100416/cloudbb.part.00
to /mnt/cloudbb.part.00 ... Downloaded cloudbb.part.00 from awk256 Downloading part myami/20100416/cloudbb.part.01
to /mnt/cloudbb.part.01 ... Downloaded cloudbb.part.01 from awk256 Downloading part myami/20100416/cloudbb.part.02
to /mnt/cloudbb.part.02 ... Downloaded cloudbb.part.02
from awk256 …中略 |
バンドルボリュームを1ファイルに纏める。この処理は数分ぐらい時間が掛る。
|
# ec2-unbundle -k
~/.ec2/pk-2N5ATGZL5EZ3XNCESA7ZH6IHIFHUJZJI.pem -m
/mnt/cloudbb.manifest.xml -s /mnt
-d /mnt Unbundle complete. # ls -l /mnt | head -3 total 2595420 -rw-r--r-- 1 root root 10737418240 Apr 16 15:50
cloudbb -rw-r--r-- 1 root root 11970
Apr 23 13:56 cloudbb.manifest.xml …中略 |
EBSボリュームアタッチ
□
EC2インスタンスのゾーンを取得する。
|
# ec2-metadata -z placement: us-east-1c |
ブートイメージ格納用のEBSボリュームを作成する。
|
# ec2-create-volume --size 10 --availability-zone
us-east-1c VOLUME
vol-7362d31a
10
us-east-1c creating
2010-04-23T04:38:24+0000 |
EC2インスタンスIDを取得する。
|
# ec2-metadata -i instance-id: i-e5ce738e |
EBSボリュームをアタッチする。
|
# ec2-attach-volume vol-7362d31a --instance
i-e5ce738e --device /dev/sdh ATTACHMENT
vol-7362d31a
i-e5ce738e /dev/sdh
attaching
2010-04-23T04:39:43+0000 |
ddコマンドを使ってイメージをリアルボリュームに戻す。
|
# dd if=/mnt/cloudbb of=/dev/sdh 20971520+0 records in 20971520+0 records out 10737418240 bytes (11 GB) copied, 1712.37 s, 6.3
MB/s |
この処理がは120以上~30分ぐらい掛る。
EBSボリュームマウント
EBSボリュームをマウントする。
|
# mkdir -p /mnt/ebs # mount /dev/sdh /mnt/ebs |
/mnt/ebs/etc/fstabの編集
fstabをバックアップする。ここでは、ローカルストレージ設定を排除する。
|
# mv /mnt/ebs/etc/fstab /mnt/ebs/etc/fstab.bak # cat /mnt/ebs/etc/fstab.bak | grep
-v mnt > /mnt/ebs/etc/fstab # cat /mnt/ebs/etc/fstab vi /etc/fstab /dev/sda1
/
ext3 defaults
1 1 /dev/sda3
swap
swap defaults
0 0 /dev/sdf
/opt/ebs
ext3 defaults
0 0 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 |
Shapshot作成
次ように実行する。
instance-to-ebs-ami.sh
|
|
EBSボリュームをデタッチする。
|
# umount /mnt/ebs # ec2-detach-volume vol-7362d31a |
ブートAMIが格納されているEBSボリュームのスナップショットを作成する。この処理は10ぐらい~20分ぐらい掛る。
|
# ec2-create-snapshot vol-7362d31a --description coludbb_sys_vol-7362d31a_20100423 SNAPSHOT
snap-70865a18
vol-7362d31a
pending 2010-04-23T05:53:42+0000
734464703039
10
coludbb_sys_vol-7362d31a_20100423 |
AWS管理コンソールから進捗を見る。

既存のカーネルIDとRAMでリスクIDを取得する。
|
# ec2-metadata -k kernel-id: aki-f5c1219c # ec2-metadata -r ramdisk-id: ari-dbc121b2 |
スナップショットからAMIを登録する。
|
# ec2-register
--snapshot snap-70865a18 --kernel aki-f5c1219c --ramdisk ari-dbc121b2 --description="CloudBB Instance" --name="cloudbb_sys_vol-7362d31a_20100423" --architecture i386
--root-device-name /dev/sda1 IMAGE ami-3d6a8454 |
instance-to-ebs-ami.shを実行する。
|
|
実行途中、次のようなメッセージが表示されるが、「y」を選択する。
|
|
EC2インスタンスを起動する。
|
# ec2-run-instances ami-3d6a8454 --availability-zone us-east-1 --instance-initiated-shutdown-behavior stop --key RESERVATION r-c25143aa
734464703039
webgrp INSTANCE
i-e5addb8e
ami-3d6a8454 pending
awk256 0
m1.small
2010-04-23T06:14:33+0000
us-east-1c
aki-f5c1219c
ari-dbc121b2
monitoring-disabled |
次のようにEBSタイプとインスタンスストアタイプのEC2インスタンスが並んでいるが、中身は同じである。

TeratermでEC2インスタンスに接続してみよう。る。

|
|
ローカルストレージをマウントする。EBSタイプのディフォルトではマウントされていない。
|
# fdisk -l Disk /dev/sda1:
10.7 GB, 10737418240 bytes 255 heads, 63
sectors/track, 1305 cylinders Units =
cylinders of 16065 * 512 = 8225280 bytes Disk identifier:
0x00000000 Disk /dev/sda1
doesn't contain a valid partition table Disk /dev/sdc:
160.1 GB, 160104972288 bytes 255 heads, 63
sectors/track, 19464 cylinders Units =
cylinders of 16065 * 512 = 8225280 bytes Disk identifier:
0x00000000 Disk /dev/sdc
doesn't contain a valid partition table Disk /dev/sda3:
939 MB, 939524096 bytes 255 heads, 63
sectors/track, 114 cylinders Units =
cylinders of 16065 * 512 = 8225280 bytes Disk identifier:
0x00000000 Disk /dev/sda3
doesn't contain a valid partition table
Filesystem
1M-blocks
Used Available Use% Mounted on /dev/sda1
10080
1967
7601 21% / none
851
0
851 0% /dev/shm /dev/sdc
150293 188 142471 1% /mnt |