新宿鮫:第11回AWSもくもく勉強会 ELBを触ってみました

先週に引き続き、新宿鮫:第11回AWSもくもく勉強会に参加しました。

今回はELB(Elastic Load Balancer)でアクセスの振り分け実験です。
ほんとはオートスケーリングまでやりたかったのですが、残念ながら時間切れ orz

アプリサーバーを用意

まずはEC2でTomcat起動。Tomcatのポートは8080を使っているので、セキュリティグループでアクセスできるようにしておきます。
このサーバーでAMIを作って、他のサーバーを立てていきます。
その際、表示されるページが同じだとどのサーバーが呼ばれているか判断できないので、JSPを用意してホスト名を動的に表示するようにします。

<%@page import="java.net.*" %>
<html>
<head></head>
<body>
Tomcat Server (Host:"<%= InetAddress.getLocalHost().getHostName() %>")<br>
</body>
</html>

AMIを作成。名前は MokuMokuAMI

f:id:yuji0316:20130703205719p:plain

AMIができたら、それを選んでLaunch

f:id:yuji0316:20130703205720p:plain

2台のEC2が準備できました。名前はRedとYellowです。

f:id:yuji0316:20130703205721p:plain

ちなみにアクセスするとこんな感じでホスト名が表示されます。

f:id:yuji0316:20130703205722p:plain

ELB(Elastic Load Balancer)の設定

EC2 DashboardにあるLoad BalancersからELBを作成します。

名前はMokuMokuELB
ここではVPC内に作成するので、"Create LB inside"でVPCを選びます。
VPC外からアクセスする必要があるので、"Create an internal ~"はチェックしないまま。
Tomcatへアクセスするために、ポート8080を追加します。
先ほど立てたEC2ではApacheも動くようにしてあったので、ポート80はそのまま残しておきます。

f:id:yuji0316:20130703205723p:plain

"Available Subnets"にあったものを選んで、"Selected Subnets"に移動します。

f:id:yuji0316:20130703205724p:plain

先ほど作成したEC2を両方とも選びます。

f:id:yuji0316:20130703205725p:plain

ELBの設定画面で各インスタンスの状況を確認できます。Status が In Service となっていればOKです。
インスタンスが正常に動作している場合でも、最初はIn Service になるまで少し時間がかかるようです。今回も2,3分ほど待ちました。

f:id:yuji0316:20130703205726p:plain

動作確認

設定画面にあるDNS Nameのポート8080にアクセスします。

f:id:yuji0316:20130703205727p:plain

無事2つのホストが交互に表示されました!
ただ、初めはなかなか切り替わらなかったのですが、なぜか画面のロードが終わってからF5を押して更新してもサーバーは切り替わらず、
F5をダブルクリックして、画面ロード中に再度アクセスすると切り替わるようですw

f:id:yuji0316:20130703205728p:plain

f:id:yuji0316:20130703205729p:plain

DNSが反映されるまでしばらく時間がかかるので、待ちきれない場合はnetstatなどでIPを調べれば表示できます。
管理コンソールからはIPを見ることができないので、裏でIPアドレスが自動に変わる可能性があります。そのため通常はDNS Nameを使った方がいいでしょう。