さて、昨日のエントリ(d:id:rx7:20080424:p1)では、Amazon EC2を使ってインスタンスを起動するところまでと、考察について述べました。
今日は、自分専用のイメージファイル(AMI: Amazon Machine Image)を作成する部分について紹介します。
# Amazon EC2/S3については、d:id:rx7:20080423:p1 をご覧ください。
昨日のエントリ(d:id:rx7:20080424:p1)で、Amazon EC2は素晴らしいサービスなんだけど、いくつか制約事項があるよ、と書きました。
その制約事項の1つが、インスタンス(仮想マシン)を起動しているうちは問題ないけど、インスタンスを停止させてしまうと、保存したディスクの内容が失われてしまうというものです。
尚、OSの再起動は問題ありません。インスタンスの停止は、イメージ的にはマシンの電源をOFFにするイメージです。
しかし、解決策が無いわけではありません。
AWSにはS3という素晴らしい大容量ストレージが備えられています。S3のストレージに必要なデータを保存するようにすれば良いわけです。
しかも、EC2からS3へのデータ転送量は無料のようですので安心です。S3に保存しているデータ容量さえ気にしておけば大丈夫です。
というわけで、早速、自分でカスタマイズしたイメージ(AMI)をS3へ保存する方法を書いてみます。
その前に、、、起動後やった方が良いこと
全ての場合にあてはまるわけではありませんが、前回、Amazon EC2で提供されている公式イメージ(Fedora)を選んだのですが、当然ながら国外で作られているイメージなので、タイムゾーンが米国になっていました。
Fedoraの場合ですと、d:id:rx7:20080425:p2を参考に日本時間に直しておくと良いと思います。Debianだとこの辺(d:id:rx7:20080219:p1)を参考に。
あとは、インターネット上で稼動させるのであれば、パッケージのアップデートなんかもやっておくと良いですね。
yumを使っているディストリビューション(Fedora, CentOS...etc)なら、以下のような感じ。
# yum update
aptを使っているディストリビューション(Debian, Ubuntu...etc)なら以下のような感じでしょうか。
# apt-get update # apt-get upgrade
では本題、イメージファイルの作成
イメージの作成にはX.509証明書が必要です。(d:id:rx7:20080424:p1で取得したもの)
尚、イメージ化されるのは/dev/sda1のみです。/dev/sda2(/mnt)はイメージ化されないので注意が必要です。
# scp -i rx7_server.id *.pem root@ec2-75-101-214-247.compute-1.amazonaws.com:/mnt
上記のような感じで、EC2インスタンスのマシンへ証明書を転送します。
次にイメージファイルへと変換します。EC2上で実行してください。
ec2# cd /mnt/ ec2# ec2-bundle-vol -d /mnt --privatekey pk-xxxxx.pem --cert cert-xxxxx.pem --user xxxx-xxxx-xxxx
上記では、「--privatekey」と「--cert」の後ろには転送した2つのpemファイルを、「--user」の後ろには、アカウント番号(Account Number)を指定します。
尚、アカウント番号は、AWSのページの右部にある「Your Web Service Account」にマウスを乗せ、上から1番目の「Account Activity」をクリック後に遷移するページに記されています。
尚、イメージ化にはしばらく時間がかかります。今回、私は公式イメージをそれほどカスタマイズしていない状態で試してみましたが、約10分程かかりました。
イメージファイルをS3へアップロード
イメージファイルをS3へ保存するには、以下のコマンドを実行します。
ec2# ec2-upload-bundle --bucket ${アップ先のバケット名} --manifest image.manifest.xml --access-key ${Access Key ID} --secret-key ${Secret Access Key}
「--bucket」は所謂保存先(バケット)です。バケットの作成についてはコチラ(d:id:rx7:20080423:p1)で。
例えば"rx7"というバケットを使っているとすると、あくまで例ですが"rx7/ec2_images/fedora"とでもしておくと良いでしょう。
イメージファイルの登録/削除
次に、先ほどアップしたファイルを自分のリストに登録します。一度EC2から抜けて実行するようにしてください。
# ec2-register rx7/ec2_images/fedora/image.manifest.xml IMAGE ami-be799cd7
上記の感じで、先程アップしたときに指定したバケットを、引数で指定するようにします。
# ec2-describe-images -o self IMAGE ami-be799cd7 rx7/ec2_images/fedora/image.manifest.xml xxxxxxxxxxxx available private i386 machine aki-a71cf9ce ari-a51cf9cc
上記コマンドで、登録したリストを確認することが出来ます。
ちなみに参考にですが、登録したリストを削除したくなったら、、、
# ec2-deregister ami-be799cd7
こんな感じです。"ec2-describe-images"コマンドで確認し、AMI IDを指定する形で削除します。
登録したインスタンスを起動
まず、先程登録したリストを確認し、"AMI ID"をメモします。以下の例だと"ami-be799cd7"となります。
# ec2-describe-images -o self IMAGE ami-be799cd7 rx7/ec2_images/fedora/image.manifest.xml xxxxxxxxxxxx available private i386 machine aki-a71cf9ce ari-a51cf9cc
では、以下のような感じで起動してみましょう。要領は d:id:rx7:20080424:p1 で紹介したものと同じです。
# ec2-run-instances ami-be799cd7 -k rx7_server
起動後、インスタンスにアクセスし確認してみましょう。前回イメージファイルの作成をしたタイミングまでのディスク内容が残されていると思います。
このように、あらかじめイメージファイル(AMI)を作ってしまえば、その状態から何個でもインスタンスを起動することができます。仮想化技術の醍醐味ですね。
インスタンスの停止
まだ、インスタンスの停止方法を書いていなかったので紹介します。とはいってもコマンド一発なので簡単です。
まず、インスタンスの状態を確認してみましょう。
# ec2-describe-instances RESERVATION r-5d17ef34 xxxxxxxxxxxx default INSTANCE i-7739fa1e ami-f51aff9c ec2-75-101-214-247.compute-1.amazonaws.com domU-12-31-39-00-79-51.compute-1.internal running rx7_server 0 m1.small 2008-04-22T09:23:43+0000 us-east-1b aki-a71cf9ce ari-a51cf9cc
"running"と表示されているので、稼動している状態です。
落としたいインスタンスの「インスタンスID」("i-"から始まる番号)をメモっておきます。上記の例だと"i-7739fa1e"となります。
# ec2-terminate-instances i-7739fa1e INSTANCE i-7739fa1e running shutting-down
先程メモったインスタンスIDを指定してシャットダウンします。
# ec2-describe-instances RESERVATION r-5d17ef34 xxxxxxxxxxxx default INSTANCE i-7739fa1e ami-f51aff9c ec2-75-101-214-247.compute-1.amazonaws.com domU-12-31-39-00-79-51.compute-1.internal shutting-down rx7_server 0 m1.small 2008-04-22T09:23:43+0000 us-east-1b aki-a71cf9ce ari-a51cf9cc
状態を確認すると、シャットダウン中は"shutting-down"と表示されていますね。
# ec2-describe-instances RESERVATION r-5d17ef34 xxxxxxxxxxxx default INSTANCE i-7739fa1e ami-f51aff9c terminated rx7_server 0 m1.small 2008-04-22T09:23:43+0000 aki-a71cf9ce ari-a51cf9cc
しばらくして、停止すると"terminated"と表示されていることが確認できるかと思います。
最後におまけ
今回(2008/4/24時点)使用したインスタンスと、Amazonの公式イメージ"ec2-public-images/fedora-8-i386-base-v1.06.manifest.xml"について、リソース情報を残しておきます。
ec2# cat /proc/version Linux version 2.6.21.7-2.fc8xen (mockbuild@xenbuilder1.fedora.redhat.com) (gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)) #1 SMP Fri Feb 15 12:39:36 EST 2008
2.6.21ベースのXenカーネルです。
ec2# cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 65 model name : Dual-Core AMD Opteron(tm) Processor 2218 HE stepping : 3 cpu MHz : 2600.000 cache size : 1024 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow up pni cx16 lahf_lm cmp_legacy svm extapic cr8legacy ts fid vid ttp tm stc bogomips : 6502.68 clflush size : 64
CPUは、AMDのOpteronの2000シリーズですね。2.6GHzもの。
ec2# free total used free shared buffers cached Mem: 1747764 402560 1345204 0 52624 272184 -/+ buffers/cache: 77752 1670012 Swap: 917496 0 917496
当然ですが、メモリも公表どおり1.7GBのっかっています。
ec2# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 10321208 1292032 8504888 14% / /dev/sda2 153899044 192076 145889344 1% /mnt none 873880 0 873880 0% /dev/shm
ディスクもまた公表どおり160GB使える状態です。まぁ、、、前述の通りインスタンスを停止すると内容は失われてしまいますが。
ですが、先日ベータテストではあるものの、インスタンスを停止してもデータを保存したままにしておけるサービスが新たに発表されました。年内には正式に提供され始めるとか。期待できそうです!
参考
- WEB+DB PRESS Vol.43 - はじめてのAmazon EC2 & S3
- http://gihyo.jp/magazine/wdpress/archive/2008/vol43
まとめ
クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)
- 作者: 並河祐貴,安達輝雄,ITpro/日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2009/11/05
- メディア: 単行本
- 購入: 4人 クリック: 372回
- この商品を含むブログ (18件) を見る