Public AMI はどれを使ったらいいかさっぱり分からなかったので、自作を選択(CentOS 5)。
手順を自動処理可能な履歴として残そうとスクリプトにしたわけですが、これがなんだかんだと苦労しました。
- 空のイメージファイル作成
- イメージファイルをマウント
- dev, sys, proc をイメージファイルに作成してマウント
- fstab 作成
- イメージファイルでのインストール用に yum の設定ファイルを作成
- Core と Base を yum で groupinstall
- eth0 の設定
- ネットワーク設定
- インスタンス起動時に SSH ログインのための鍵を配備するスクリプトの準備
- ひとまず SELinux を無効にする
- rpmforge を使える様にしておく
- タイムゾーンの設定
- (やっていいのか不安ながら)時計合わせ関連の設定
- Rails 関連のパッケージをインストール
- ec2-ami-tools をインストール
- JDK をインストール
- 起動時に EBS をアタッチ&マウントするスクリプトの準備
- 起動時に Elastic IP を割り当てるスクリプトの準備
- 環境変数を設定
- ec2-api-tools など、いくつかのスクリプト類を準備
- イメージファイルをアンマウント
スクリプトでは上記を行う様にしてみました。
手順の詳細は以下を参考にしています。
- [僕] Amazon EC2 用に自分で CentOS 5 のイメージを用意する
- Amazon EBSのボリュームを自動でattachしてマウントしたい - cyberarchitect
- Elastic IPを自動で割り振りたい - cyberarchitect
参考記事通りに普通にやっていれば、きっと特に困ることなくすんなりいくんだと思いますが、自分の能力や環境やらでは、あれこれと問題にぶち当たりました。
一番大きかった問題が、Core グループのインストール時に pam のインストールで失敗する「ことがある」というものでした。たまに上手くいって、たまに上手くいかないわけです。何回か繰り返し実行していると、成功したり失敗したり。rm, cat, install について、"command not found"と言われるわけですが、今でも理由がさっぱり分かりません。
時計周りで問題になっているのかと思い、ntpd を動かしてみたり、止めてみたり。Parallels 上の CentOS 5 で AMI を作成しているわけですが、時計は Parallels が勝手に面倒を見てくれるはずなので、ntpd は止めるが正解だと判断しました。システムクロックとハードウェアクロックが結構ずれていたので、これらをあわせてみて、改めて AMI を作ると成功したりします。が、また失敗したりもします。
正直、さっぱり分かりません。yum の --installroot を使った場合に PATH が問題になるのかと思いましたが、それだと成功するときがある意味が分かりません。そんなこんなで、運頼りでやっています。
後は、インスタンスを動かした後でちょっとした問題(忘れ物)に気がづいて、何度か作り直すことになって無駄に時間がかかったのも問題でした。イメージ作りも 10GB のものを作ろうとしているために時間がかかりますし、アップロードは更に時間がかかります。
実は、一通りを手元でやるよりも、最小限の構成で AMI を作って、後はインスタンス起動後に適当なスクリプトで設定をあれこれした方が時間の節約が可能だった様な気がしています。ただ、どうもターミナルの反応の鈍さが気になるので、いまいち乗り気になれなかったりします。
と、まあ、まだまだ忘れている(見落としている)ことが多々ありそうですが、一段落としようかと思っています。

