Amazon EC2/S3を使ってみた - 3.EC2起動後〜AMI作成

by Christopher Chan


さて、昨日のエントリ(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)

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)