keisyuのブログ

最近めっきりエンジニアリングしなくなった厄年のおじさんがIT技術をリハビリするブログ。

AWSを使ってみる. ( ELB 編 )

ELB*1aws の構成の中で一般的にロードバランサ(負荷分散装置)と呼ばれるものを提供する機能です。

  • ELB配下のロジックサーバ(インスタンス)に対して適切にトラフィックを分散して流すことができる
  • 配下のサーバのヘルスチェックを行うことでサーバ障害等の発生時に自動的に障害サーバを切り離すことができる
  • AZを分散して配下のサーバを配置した場合はまずAZ単位で分散した後にAZ内のサーバに分散することが可能。AZレベルの障害も回避可能。
  • ELB自体の耐障害性を高めるためにRoute53 (DNSラウンドロビン) も併用するとさらによし。
  • VPCと併用することでユーザのアクセスするサーバをELBとしてVPC内のサーバーを隠ぺいすることが可能。

ELBの構成手順

前回構成したVPCの中にプライベートIPのみを持つ複数のHTTPDサーバに対して外部からELB経由でアクセスしてみます。

User <====> ELB ( Public Subnet ) <----> EC2 ( Private Subnet ) x2

上のような構成をしてみます。ただしこの構成を実現する場合はプライベートサブネットをパブリックサブネットと同一のAZにする必要があります.
f:id:keisyu:20140303190826j:plain:w300

設定はEC2のマネージメントコンソールの左カラムのNETWORK & SSECURITY 内の Load Balancers が ELB の設定です。
f:id:keisyu:20140303173033j:plain:w150

まずはELBの管理上の名称を決めるのと、どのプロトコルの通信を転送するかを決定します。VPC内に設置するのでそれを選択します。
f:id:keisyu:20140303192146j:plain:w300

HTTPSをサポートする場合はこの間にSSL証明書関連の設定が挟まりますが、今回はHTTPでしたので次の項目であるヘルスチェック関連の設定を行います。今回はすべてデフォルトとしときます。
f:id:keisyu:20140303192233j:plain:w300

次にサブネットを指定します。配下にするEC2の属するサブネットではなくELBの属するパブリックサブネットを指定します。ELBは外部からのアクセスに利用する場合(一般的)はパブリックなセグメントに配置する必要があります。
f:id:keisyu:20140303192352j:plain:w300

次にELBに対するセキュリティグループを定義します。HTTPを外部から接続なのでデフォルトのままでOKとします
f:id:keisyu:20140303192738j:plain:w300

ELBに割り当てるインスタンスを指定します。ここでプライベートセグメントに属するインスタンスが選択肢に現れない場合はELBが配置されたAZと異なるパブリックセグメントでプライベートサブネットを定義している可能性が高いです。
同一AZという条件に沿っていればアサインするインスタンスはプライベートなセグメントに配置してあるものでもOKになります。
f:id:keisyu:20140303193044j:plain:w300

最後確認画面が出ますのでCreateでELBの作成完了です。

挙動確認

ELBに割り当てたインスタンスhttpdをインストールして適当な /index.html を配置します。access_log を tail しているとELBのヘルスチェックアクセスがきて200応答をしていることがわかります

[root@ip-10-0-1-190 httpd]# tail -f access_log 
10.0.0.87 - - [03/Mar/2014:10:36:22 +0000] "GET /index.html HTTP/1.1" 200 85 "-" "ELB-HealthChecker/1.0"
10.0.0.87 - - [03/Mar/2014:10:36:52 +0000] "GET /index.html HTTP/1.1" 200 85 "-" "ELB-HealthChecker/1.0"
..

ELBのマネージメントコンソールからヘルスチェックステータスを確認することが可能です。
f:id:keisyu:20140303194453j:plain:w300

ELBのDNS Nameをしらべて http でブラウザでアクセスしたらアクセスできると思います。
f:id:keisyu:20140303194649j:plain:w300

リロードするとアクセス元のインスタンスが切り替わっているのも確認できます。

便利な世の中になったもんだと実感しました。