読者です 読者をやめる 読者になる 読者になる

Elastic Load Balancer

仕事の兼ね合いもありつつ、いつの間にかベータが取れていたので、Elastic Load Balancerを調べてみました。

Elastic Load Balancerとは

いわゆるロードバランサーのサービス。Elastic Load Balancerに対して複数のEC2のインスタンスを紐つけることで、リクエストを各インスタンスに分散できます。

料金

US-EASTだと、1時間当たり$0.025。またデータ通信量が1GBあたり$0.008かかります。
例によって、EUやカリフォルニアは若干高いです($0.028/hour,0.008/GB)

使用方法

SOAPとRESTのAPIが用意されています。またAWS Management Consoleから操作することも可能になっています。
コンソールでは以下のような手順になります。


はじめに、コンソールのNavigationから「Load Balancers」を選び、Create Load Balancerボタンを押します。


ロードバランサの名前と、ポートの設定をします。ポートは、ロードバランサでListenするポートと、受けたリクエストをEC2のどのポートに流すかを設定します。

ロードバランサの80番ポートで受けたリクエストをそのままEC2インスタンスの80番に流す設定にすれば、既存のWebサーバに手を加えずにロードバランサに加えることが出来ます。
ロードバランサのポートと、EC2インスタンスのポートを変えることが出来るので、よくある80番->8080番の設定も可能です。
またSSLを使用する場合は、443ポートを加えればOKです。


次に、EC2のインスタンスが動作しているかどうかをチェックするための、ヘルスチェックの設定をします。

ヘルスチェック用のプロトコルとしては、HTTPとTCPを選択できます。
HTTPの場合はPingリクエストを送るパスが指定できるため、Webアプリケーションにヘルスチェック用のサーブレットを入れておけば、アプリの稼動有無によってヘルスチェックを行うことが出来ます。
オプションとしては、レスポンスタイムアウトの時間、チェックインターバル、稼動有、稼動無と判定するまでの試行回数を指定できます。


最後に、ロードバランサがバランス対象とするEC2インスタンスを選択します。

注意点としては、同一リージョン内のインスタンスしか対象にできない点です。
ただし同一リージョンであれば異なるゾーンでもOKなので、us-east-1aとus-east-1bのインスタンスに対してバランシングすることが出来ます。


ロードバランサが立ち上がると、ロードバランサにパブリックなDNS名が振られます。あとはこのDNS名を使用してアクセスするか、もしくは自分のDNSのCNAMEとして登録します。


なおこのDNSに紐づくIPアドレスですが、固定IPではなく、ダイナミックに変わるようです。ここらへんのエントリが参考になります。
http://www.milkstand.net/fsgarage/archives/001633.html
http://developer.amazonwebservices.com/connect/thread.jspa?threadID=34424&tstart=1
http://www.shlomoswidler.com/2009/07/elastic-in-elastic-load-balancing-elb.html


冗長性を持たせるための仕様のようなので、IPアドレスを自分のDNSに対して登録するのはやめておいた方がよいと思います。

所感

コンソールから操作できるようになり、かなり利用ハードルが下がった感じです。
ただし、例えばセッションIDごとに処理を振り分けたり、振り分け比率を決めたりということは出来ないようなので、その点は考慮した設計が必要かと思います。