Posted on Sun Dec 02 13:31:37 +0900 2012 by nabeken
前回はAmazon Linux 2011.09上でCentOS 5.6のリリース版AMIを作成する手順を記しました。 今回は作成したAMIをEBS-backedに作り返る手順を記します。
今回は pvgrub + パーティションのないディスクイメージ (swapをディスクイメージとして持つ) で作成します。 先日リリースされた待望の m1.small (x86_64) でも動きます。
ストレージの種別について、前回の記事から再掲します。 (このあたりはXenがどのようにゲストへディスクを見せるかという話です。)
instance store-backed (S3-backed)
インスタンスストレージ(ephemeral領域と同じ種別)上にディスクイメージを展開したものをroot deviceにする。 root deviceになる場合、domUからはsdaとしては見えず、パーティション1(sda 1)として見える。
EBS-backed
通常、EBSはディスク(sdaなど)として見えます。パーティションを切って使うこともできます。
パーティションを切らない場合(domU的にパーティションXとして見える)は instance store-backedと同様の扱いになります。
ややこしいのは、ストレージの種別とdomU(インスタンス)からみた場合の見えかたは直接は関係ありません。
raw または unpartitioned disk image
domUからはパーティション1(sda1)のように見える。pvgrubからみるとこれを whole disk と 呼んでいる。ほとんどのAMIがこの形式。
instance store-backedのAMIは通常この形式になる。実のところ、EBS-backedのAMIも ほとんどがこの形式。
(なぜなら、m1.smallはsda2にephemeral領域, sda3にスワップ領域をねじこむため、sdaにEBSをattach してもsda2, sda3は見えない。全インスタンスタイプに対応可能なAMIを作る場合はsda1を / にして、 EBSをattachするのが得策。)
pvgrubを使う場合は "hd0" 版を使います 。
partitioned disk image / image that has a partition table
domUからはディスクそのもの(sda)のように見える。
LVMルートにする場合、 / はpvgrubから見えないため、/bootだけ通常のファイルシステム として見せる必要があります。そのため、パーティションを切る必要でてきます。
/bootを分割する必要がなければわざわざこの形式を選ぶことはいと思います。 swapもディスクイメージとして持てるのでわざわざ切る必要はありません。
pvgrubを使う場合は "hd00" 版を使います 。
手順は以下。
作成したinstance store-backed AMIから起動
ec2-run-instances でもManagement Consoleでもなんでも。
EBS-backedにするために新規にEBS volumeを作成
作成時、AZを起動したインスタンスに合せます。生のEBSはAZを跨いでattachできません。 (EBSから作ったスナップショットはリージョン内ならAZ問わず参照可能)。
このEBS volumeが / になります。容量がここで決まります。今回は10GiBにしました。
作成したEBS volumeを起動したインスタンスにattach
今回は /dev/sdf にattachしました。
起動したインスタンスでattachしたEBS volumeを下ごしら
パーティションは切らずに そのまま /dev/sdf をext4でフォーマットします。
# yum install -y e4fsprogs (必要に応じて) # /sbin/mkfs.ext4 -L '/' /dev/sdf # mkdir /media/ebs-root # mount /dev/sdf /media/ebs-root
EBS volumeへ起動中のインスタンスの中身をコピー
rsyncでいっきにコピーします。
# rsync -avP --exclude=/proc --exclude=/sys --exclude=/media / /media/ebs-root/ # mkdir /media/ebs-root/{proc,sys,media}
スワップをディスクイメージで用意
m1.smallにはもともと1GBのswapパーティションがついてきますが、全インスタンスで共通化するため、 EBS内部に含めておきます。
# dd if=/dev/zero of=/media/ebs-root/SWAP.IMG bs=1M count=1000 # mkswap /media/ebs-root/SWAP.IMG
fstab調整
swapを追加します。
# vi /media/ebs-root/etc/fstab /SWAP.IMG none swap sw 0 0
痕跡を削除
念のため .bash_history が存在していれば削除します。
# rm /media/ebs-root/root/.bash_history
忘れずに公開鍵も削除しておきます。
# rm /media/ebs-root/root/authorized_keys
EBS volumeをumountしてスナップショット作成
# umount /media/ebs-root
ec2-create-snapshot を使うなりManagment Consoleを使うなりしてEBS volumeに対してスナップショットを作成します。
AMIを作成
出来上がったスナップショットをroot deviceにしてAMIを作成します。ついでにephemeral領域も最大限有効にしておきます。
# ec2-register --cert ${EC2_CERT} --private-key ${EC2_PRIVATE_KEY} -a x86_64 \ -n 'CentOS 5.6 (x86_64) EBS-backed/swap/ephemeral0-3' \ -d 'CentOS 5.6 (x86_64) EBS-backed w/swap/ephemeral[0-3]' --snapshot snap-XXXXX \ -b '/dev/sdc=ephemeral0' -b '/dev/sdd=ephemeral1' -b '/dev/sde=ephemeral2' -b '/dev/sdf=ephemeral3' \ --kernel aki-aki-ee5df7ef
できあがったAMIで起動する
念のため各インスタンスタイプ(t1.micro, m1.{small,large}など)で起動するかを確認します。
作成に使ったEBS volumeは置いておくと便利です。 今後、AMIを更新する必要があればまたEBSをattachし、更新後スナップショットを取り ec2-register するだけです。
たぶん、 ec2-create-image とか他のを使えばもう少し楽かもしれません。