August 20, 2008

[AWS] EC2の仮想マシンイメージを作った

Amazon EC2は、Amazonのインフラ上で、仮想マシンを好きな数だけ起動できるサービスです。
料金は各マシンの起動時間の合計に比例するため、例えば大量のマシンを短時間起動して並列処理、など色々な使い方ができるようです。

使用できる仮想マシンはAmazonから提供されているのですが、自分でイメージファイルを作成してアップロードすることもできます。

作成手順は、Amazon Elastic Compute Cloud Developer Guideの「Creating an AMI through a Loopback File」が参考になります。
EC2のバックエンドもXenなので、Xenのイメージファイルの作成手順とほとんど同じです。

手順を参考にCentOS5のイメージを作成したのですが、いくつかつまずいたところがあったので、メモしておきます。

■gsg-keypairでログインできない
EC2には、ec2-add-keypairコマンドでopensshキーを発行し、公開鍵をAmazon側に登録しておく仕組みがあるのですが、自作した仮想マシンイメージでは、登録したキーでのログインができません。
検索したところ、仮想マシン側で公開鍵を取得して.ssh/authorized_keyなどに登録する処理はスクリプトで追加する必要があるようです。
参考URL:http://developer.amazonwebservices.com/connect/message.jspa?messageID=76910
上記のURLを参考にget-credentials.shを作成し、/etc/rc.localで実行するようにしたところ、登録したキーでのログインができるようになりました。

■ec2-bundle-volが実行できない
EC2では、仮想マシン上でのファイルの変更は、インスタンスを停止した際に消えてしまうため、バックアップの方法を考える必要があります。Amazonから提供されている手段として、ec2-bundle-volコマンドで現在の実行環境をイメージファイルに書き出し、ec2-upload-bundleコマンドで、S3に保存する方法が提供されています。が、自作した仮想マシンイメージではec2-bundle-volコマンドが
mount: Could not find any loop device. Maybe this kernel does not know
about the loop device? (If so, recompile or `modprobe loop'.)
execution failed: "mount -o loop /mnt/image /mnt/img-mnt"
ec2-bundle-vol failed.
とエラーが出て、実行することができませんでした。
エラーメッセージにしたがって
# modprobe loop
を実行しても、
FATAL: Could not load /lib/modules/2.6.16-xenU/modules.dep: No such file or directory
でこれもエラーになってしまいます。どうも、2.6.16-xenUに対応したモジュールが必要なようです。これも検索したところ、http://s3.amazonaws.com/ec2-downloads/modules-2.6.16-ec2.tgzからモジュールをダウンロードして解凍した後、
depmod -a
modules.depを生成すればよいことがわかりました。
参考URL:http://developer.amazonwebservices.com/connect/entry.jspa?externalID=798



matssaku at 00:26│Comments(0)TrackBack(0)clip!Xen | AWS

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔