nkjmkzk.net

powered by Kazuki Nakajima

EC2でOracle Linux AMIを使ってカスタムAMIを作る方法

OracleはEC2用のAMIを数多く提供しています。そうしたAMIをそのまま使ってももちろんOKなのですが、やはり自分の環境用にカスタマイズしたくなります。実際EC2ではAMIをカスタマイズして再度それを新しいAMIとして登録することができます。こうして自分だけのAMI作っておけば後々おなじようなセットアップ作業を繰り返しおこなう必要がなくなって便利ですよね。

ときにOracle VMではOracle VM Templateというものを提供していますが、EC2上のOracle AMIはこのVM Templateの実装を取り込んでいます。Oracle VM Templateにはoraclevm-templateというツールがインストールされており、このツールを使うとテンプレートのカスタマイズがちょっぴり楽チンになります。そしてこのoraclervm-templateがOracle Linux AMIにもインストールされているのです。

どういう風に楽チンなのか。

EC2上で新規にAMIを作る際には既存のAMIをベースにカスタマイズを行いそれを新AMIとして再登録する形が最も簡単だと思いますが、その際には一度AMIからホスト固有の情報をはぎとってニュートラルな状態にするためにSSH用の鍵を消したり、ログを消したり、キャッシュを消したり、という面倒な作業が必要になります。

ここでoraclevm-templateの出番です。AMIのカスタマイズが一通り完了して、これからAMI登録するよ、という時点で、下記のコマンドを発行します。

[root@~]# oraclevm-template --cleanup
[root@~]# oraclevm-template --enable

するとAMIから現在のログ等がクリーアップされ、次回起動時には新しい鍵ファイルが生成されるといった具合で最後の一手間をまとめてやってくれます。そしてこのクリーンアップ処理はきちんとEC2対応しており、通常だとoraclevm-template –cleanupしてしまうとネットワーク情報がリセットされるためSSH接続がきれてしまうのですが、EC2ではSSHがライフラインなのでここが切れては困ります。そこでoraclevm-templateはEC2上ではネットワークのリセットは行わないような配慮が加えられています。なので安心してcleranupしてください。

クリーンアップをおこなったらインスタンスを停止し、EBSボリュームのSnapshotを作成します。

[nkjm@mac]$ ec2-create-snapshot -d 'cleaned image' vol-42aaf52a
* -d: 作成されるスナップショットの説明
* vol-42aaf52a: EBSのVolume ID(ec2-describe-instancesで確認)

そしてSnapshotからAMI登録する、とすればオリジナルのAMIが出来上がりです。

ec2-register -n my-new-ami -d 'nakajima template' --root-device-name /dev/sda1 -b /dev/sda1=snap-be86f0d2 -a x86_64 --kernel aki-23d43a4a --ramdisk ari-25d43a4c
* -n: 作成されるAMIの名前
* -d: 作成されるAMIの説明
* --root-device-name: インスタンスからみたルートデバイス
* -b: ルートデバイスとそれに対応するSnapshotのID(ec2-describe-snapshotsで確認)
* -a: アーキテクチャ
* --ramdisk: ramdiskのID(元のインスタンスで確認)
* --kernel: kernelのID(元のインスタンスで確認)

このAMIはMy AMIsとして登録されますので、Lauch Instanceする際にこのAMIをMy AMIsから選択してインスタンスを作成できます。

ちなみに僕はami-09d43a60をベースに自分のAMIを上記手順で作成しています。

without comments

Written by 中嶋 一樹

3月 17th, 2011 at 5:07 pm

Posted in Uncategorized

Tagged with , ,

Leave a Reply