Amazon EC2/S3を使ってみた - 2.EC2が起こすイノベーション

by Christopher Chan


さて、昨日(d:id:rx7:20080423:p1)はAWSに登録して、Amazon S3を軽く使うところまで紹介しました。

今日は、Amazon EC2を動かしてみて、最後に考察も書いてみたいと思います。
# Amazon EC2/S3については、d:id:rx7:20080423:p1 をご覧ください。


昨日も書きましたが、Amazon EC2は仮想マシンのホスティングサービスで、所謂レンタルサーバみたいなものですが、いくつかの制約事項もあります。
このEC2もHaaS(Hardware as a Service)形式での提供となるため、従量課金制となります。


以下に料金表を引用していますが、一番小規模のインスタンスで1時間あたり$0.1ながら、1vCPU(1Core)、1.7Gメモリと、なかなかお買い得です。

Instances

$0.10 - Small Instance (Default)

1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of instance storage, 32-bit platform 


$0.40 - Large Instance

7.5 GB of memory, 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of instance storage, 64-bit platform 


$0.80 - Extra Large Instance

15 GB of memory, 8 EC2 Compute Units (4 virtual cores with 2 EC2 Compute Units each), 1690 GB of instance storage, 64-bit platform 


あと、上記のインスタンスの料金とは別に通信料も発生しますが、以下の通り、1GBあたり$0.1〜と、こちらもなかなかお買い得な値段設定です。

Internet Data Transfer
$0.10 per GB - all data transfer in 
$0.18 per GB - first 10 TB / month data transfer out
$0.16 per GB - next 40 TB / month data transfer out
$0.13 per GB - data transfer out / month over 50 TB 

Data transfer "in" and "out" refers to transfer into and out of Amazon EC2.

Data transferred between Amazon EC2 and Amazon S3-US or Amazon SimpleDB, is free of charge (i.e., $0.00 per GB), except data transferred between Amazon EC2 and Amazon S3-Europe, which will be charged at regular rates. 


と、まぁこんな感じなので、1ヶ月間動かしっぱなしで、ぼちぼち使われたとしても月に$80くらいでしょうか。バックエンドのインフラが"Amazon"ということを考えると素敵ですよね。


んじゃ、早速使ってみることにします。

証明書の取得

EC2を動かすには、X.509証明書が必要となります。

AWSのページの右部にある「Your Web Service Account」にマウスを乗せ、上から2番目の「AWS Account Identifiers」をクリックすると、以下のようなページに遷移します。


https://farm3.static.flickr.com/2270/2436051777_b35a8f5dca_o.png

X.509 Certificate」にある「Create Now」ボタンをクリックし、2つのファイル「Private Key file」と「X.509 Certificate file」を生成し、手元にダウンロードしておいてください。

Amazon EC2 Command-Line Tools

EC2のための操作コマンドが入った「Amazon EC2 Command-Line Tools」を導入します。
以下URL先からダウンロードして、解凍した後、適当な場所に配置してください。

Amazon Web Services Developer Connection : Amazon EC2 Command-Line Tools
http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=88&externalID=351

尚、ツールの実行にはJavaランタイムが必要です。インストールされていない方は、あわせてインストールしてください。

配置が出来たら、次は環境変数の設定です。Linux環境でしたら、以下の要領でパスを通しましょう。

export JAVA_HOME=/usr/local/java
export EC2_HOME=/usr/local/ec2-api-tools
export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin
export EC2_PRIVATE_KEY=/home/rx7/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=/home/rx7/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem

※Windowsの場合は、setコマンドで環境変数の設定を行いましょう。

# ec2ver
1.3-19403 2008-02-01


設定が完了したら、上記のコマンドを実行し、バージョン番号が返ってきたらOKです。

イメージファイル(AMI)の選択

EC2で仮想サーバを起動するためには、AMI(Amazon Machine Image)が必要となります。
これは、Amazonが提供しているイメージもあれば、一般のユーザが公開しているものもあります。


公開されている全てのイメージを確認するには、以下のコマンドを実行します。

# ec2-describe-images -x all


全てのイメージが表示されるかと思います。結構多いですよね。EC2 on Railsのイメージあたりが気になるところ。


今回は、無難にAmazonが提供してくれている公式イメージを使ってみたいと思います。
Amazonが公開しているイメージの一覧を見るには以下のコマンドを実行します。

# ec2-describe-images -o amazon
IMAGE   ami-bd9d78d4    ec2-public-images/demo-paid-AMI.manifest.xml    amazon  available       public  A79EC0DB        i386    machine
IMAGE   ami-26b6534f    ec2-public-images/developer-image.manifest.xml  amazon  available       public          i386    machine
IMAGE   ari-a51cf9cc    ec2-public-images/ec2-initrd-2.6.21.7-2.fc8xen.i386.manifest.xml        amazon  available       public          i386    ramdisk
IMAGE   ari-b31cf9da    ec2-public-images/ec2-initrd-2.6.21.7-2.fc8xen.x86_64.manifest.xml      amazon  available       public          x86_64  ramdisk
IMAGE   aki-a71cf9ce    ec2-public-images/ec2-vmlinuz-2.6.21.7-2.fc8xen.i386.manifest.xml       amazon  available       public          i386    kernel
IMAGE   aki-b51cf9dc    ec2-public-images/ec2-vmlinuz-2.6.21.7-2.fc8xen.x86_64.manifest.xml     amazon  available       public          x86_64  kernel
IMAGE   ami-f51aff9c    ec2-public-images/fedora-8-i386-base-v1.06.manifest.xml amazon  available       public          i386    machine aki-a71cf9ce    ari-a51cf9cc
IMAGE   ami-f21aff9b    ec2-public-images/fedora-8-x86_64-base-v1.06.manifest.xml       amazon  available       public          x86_64  machine aki-b51cf9dc    ari-b31cf9da
IMAGE   ami-a21affcb    ec2-public-images/fedora-core-6-x86_64-base-v1.06.manifest.xml  amazon  available       public          x86_64  machine aki-a53adfcc    ari-a23adfcb
IMAGE   ami-25b6534c    ec2-public-images/fedora-core4-apache-mysql.manifest.xml        amazon  available       public          i386    machine
IMAGE   ami-23b6534a    ec2-public-images/fedora-core4-apache.manifest.xml      amazon  available       public          i386    machine
IMAGE   ami-20b65349    ec2-public-images/fedora-core4-base.manifest.xml        amazon  available       public          i386    machine
IMAGE   ami-22b6534b    ec2-public-images/fedora-core4-mysql.manifest.xml       amazon  available       public          i386    machine
IMAGE   ami-36ff1a5f    ec2-public-images/fedora-core6-base-x86_64.manifest.xml amazon  available       public          x86_64  machine
IMAGE   ami-2bb65342    ec2-public-images/getting-started.manifest.xml  amazon  available       public          i386    machine
IMAGE   ari-a23adfcb    ec2-public-images/initrd-2.6.20-1.3002.fc6xen.ari.manifest.xml  amazon  available       public          x86_64  ramdisk
IMAGE   aki-9b00e5f2    ec2-public-images/vmlinuz-2.6.18-xenU-ec2-v1.0.i386.aki.manifest.xml    amazon  available       public          i386    kernel
IMAGE   aki-9800e5f1    ec2-public-images/vmlinuz-2.6.18-xenU-ec2-v1.0.x86_64.aki.manifest.xml  amazon  available       public          x86_64  kernel
IMAGE   aki-a53adfcc    ec2-public-images/vmlinuz-2.6.20-1.3002.fc6xen.aki.manifest.xml amazon  available       public          x86_64  kernel


今回は例として、この中の"ec2-public-images/fedora-8-i386-base-v1.06.manifest.xml"ってのを使ってみることにします。
ので、AMI IDである"ami-f21aff9b"をメモっておきましょう。

ログインキーの設定

起動には、キーが必要となるため生成し、パーミッションを適切に変更しておきます。

# ec2-add-keypair rx7_server | sed -e "1d" > rx7_server.id
# chmod 400 rx7_server.id

インスタンスの起動

では、いよいよインスタンス(仮想マシン)を起動します。以下のコマンドを実行してインスタンスを起動させましょう。

# ec2-run-instances ami-f51aff9c -k rx7_server
RESERVATION     r-5d17ef34      xxxxxxxxxxxx    default
INSTANCE        i-7739fa1e      ami-f51aff9c                    pending rx7_server     0               m1.small        2008-04-22T09:23:43+0000        us-east-1b      aki-a71cf9ce    ari-a51cf9cc


上の例では、何もオプションをつけていないため、最も小規模なsmallインスタンスで起動します。より大きいインスタンスで起動したい場合は"--instance-type"オプションを使いましょう。
尚、このタイミングから課金が発生します。

# 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"となっているので、無事起動しているみたいです!
上記の例では、起動したインスタンスは"ec2-75-101-214-247.compute-1.amazonaws.com"というアドレスがついているので、メモっておきましょう。

ポートの設定

初期状態では、全てのポートが閉じられている状態のようです。
以下のコマンドでSSHとHTTPだけ通すように設定します。

# ec2-authorize default -p 22
GROUP           default
PERMISSION      default  ALLOWS  tcp     22      22      FROM    CIDR   0.0.0.0/0

# ec2-authorize default -p 80
GROUP           default
PERMISSION      default  ALLOWS  tcp     80      80      FROM    CIDR   0.0.0.0/0

では、早速アクセス!

あらかじめ作っておいたログインキーを使ってSSHでアクセスします。接続先は事前にメモっておいたアドレスを利用します。

# ssh -i rx7_server.id root@ec2-75-101-214-247.compute-1.amazonaws.com

         __|  __|_  )  Fedora 8
         _|  (     /    32-bit
        ___|\___|___|

 Welcome to an EC2 Public Image
                       :-)
    Base

 --[ see /etc/ec2/release-notes ]--

[root@domU-12-31-39-00-79-51 ~]#

上記のような感じでログインできたら成功です!

動かしてみて・・・考察

早速ではありますが、サービスが実用的に動かせるかどうか知りたったので、実験的にRedmineを動かしてみました。
使ったイメージ(AMI)には、rubyとrubygemsはインストールされていたので、yumでmysql-serverとruby-devパッケージを、gemでrailsとmongrelをインストールすることで、すぐに動かすことができました。


周りの人にも見てもらいましたが、Redmineを動かしている限りは、想像していたよりモッサリ感はなく、普通にサクサク動いている感じです。細かい画像がたくさんあるサイトなど多くのリクエストが発生しそうなページについては、試していませんが実用に十分耐えうると感じました。


何より、私が衝撃的だったのは、今日初めてAmazon EC2を体験した私が、手ぶらな状態からわずか1時間半でインターネット上でRedmineのサービスを稼動し始めたことです。

これは物凄いイノベーションだ。普通なら秋葉原までサーバ買いに行って帰ってくるだけで1時間半かかりそうです。


誰でも簡単に、しかもイニシャルコスト・ゼロ!で、迅速にサービスを立ち上げられる時代がきました!
スケーラビリティについても悩む必要はないです。リソースはどんどん提供してもらえるし、利用した分だけ課金されるだけなのです。


もう、サーバのセッティングして通電してOSインストールして、、、なんてやっている時代ではないのかもしれません。

これに全て置き換えられるわけではないことは承知していますが、少なくともSaaSを補完する存在はHaaSであり、その代表格がこのAmazon EC2であることを覚えておくべきです。

参考

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)