0から始めるAWS入門③：ELB編

# 前回まで
[0から始めるAWS入門：概要](http://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde)
[0から始めるAWS入門①：VPC編](http://qiita.com/hiroshik1985/items/9de2dd02c9c2f6911f3b)
[0から始めるAWS入門②：EC2編](http://qiita.com/hiroshik1985/items/f078a6a017d092a541cf)

# 概要
インターネットからの玄関となるELBを設定する。

# ELBの作成
[NETWORK & SECURITY]カテゴリの[Load Balancers]を選択し、[Create Load Balancer]ボタンをクリック。

## ロードバランサーの定義
第１回で作成したVPC向けのELBを作成する。
[Load Balancer Name]に該当VPCのWEBインスタンス向けという識別がつくような任意の値を設定する。例として[test-web]とする。
[Create LB Inside]で該当VPCを選択する。

ELB-EC2間のポート設定として、下記の設定を行う。

|Load Balancer Protocol|Load Balancer Port|Instance Protocol|Instance Port|
|:----|:----|:----|:----|
|HTTP|80|HTTP|80|
|HTTPS|443|HTTP|80|

これでインターネットからELBへ80、443番でリクエストが来た場合、該当EC2インスタンスの80番へフォワードされる。

が、今回は学習用でSSLも取得しないので、とりあえず80番ポートのみとした。
HTTPSを設定した場合は、別途次の設定画面でSSL証明書をELBにアップロードするという設定画面となる。

![スクリーンショット 2015-05-07 19.46.03.png](https://qiita-image-store.s3.amazonaws.com/0/34930/954f8ca4-6ace-4a4a-e0fe-ef289cee8061.png)


## ヘルスチェック

対象インスタンスが正常に動作しているかの確認用のヘルスチェックの設定を行う。
この設定により正常に動作してないとみなされた場合、自動的にELBから対象のEC2インスタンスは切り離される。


|項目|内容|値|
|:----|:---|:----|
|Ping Protocol|ヘルスチェックに用いるプロトコル|HTTP|
|Ping Port|ヘルスチェックに用いるポート番号|80|
|Ping Path|ヘルスチェックに用いるリクエストパス|/|
|Response Timeout|ヘルスチェックのレスポンスタイムアウト時間（秒）|5|
|Helth Check Interval|ヘルスチェックを行う間隔（秒）|10|
|Unhealthy Threshold|ヘルスチェックに連続何回失敗したら異常とみなして切り離すか|2|
|Healthy Threshold|ヘルスチェックに連続何回成功したら正常とみなして繋ぎ直すか|5|

この設定の動作を要約すると、ELBが5秒間隔でEC2インスタンスへHTTPアクセスし、200okが返ってくるようであれば正常とみなす。
レスポンスとして40xや50xが2回連続で返ってくれば、異常とみなし対象のEC2インスタンスは自動で切り離される。
再度、5回連続で200okが返るようになれば、再度対象EC2インスタンスを繋ぎ直す。


![3-2_helth_check.png](https://qiita-image-store.s3.amazonaws.com/0/34930/6c461e05-c55e-e98c-8e6f-98ae98ac3d8f.png)

## サブネット
このELBが担当するサブネットを設定する。
現時点ではVPC内にSubnetを１つしか作成していないため、該当サブネットをAdd（＋マーク）する。
VPC内に複数のSubnetが存在し、それらSubnetを跨るELBを作成する場合は、別途それらSubnetを含めるようにする。

![3-3-1_subnet.png](https://qiita-image-store.s3.amazonaws.com/0/34930/afa6b062-9da0-646a-32c0-c9832722f9a9.png)

## セキュリティグループ
前回は、EC2インスタンス向けのセキュリティーグループを作成したが、今回はELB向けのセキュリティグループを設定する。
[Assign a security group]で[Create a new security group]を選択して新規作成する。
[Security group name]はセキュリティーグループ名として任意の値を設定する。WEBのELB向けということで、[test-web-elb]とした。
[Description]は、任意のわかりやすい説明文を設定する。

今回の要件は、HTTP(80)をIP制限をかけずにこのELBへアクセスできるようにすればよいので下記のとおりになる。

|Type|Protocol|Port Range|Source|
|:---|:----|:----|:----|:----|
|HTTP|TCP|80|Anywhere 0.0.0.0/0|

![3-4_security_group.png](https://qiita-image-store.s3.amazonaws.com/0/34930/914ac2f7-a07d-3412-6a6e-2bebfff630d4.png)

## インスタンスの設定
どのインスタンスをこのELBにぶら下げるかを設定する。
前回設定したEC2インスタンスを選択する。

![3-5_instance.png](https://qiita-image-store.s3.amazonaws.com/0/34930/ea0e60bb-6c33-9622-9527-d3f411212471.png)

その他のオプションについては、オンにしといて今は特に気にする必要ないが説明だけ。
[Enable Cross-Zone Load Balancing]

|項目|内容|
|:---|:---|
|Enable Cross-Zone Load Balancing|AZを跨ぐようなELBの場合、AZ単位ではなくインスタンス単位でバランシングする|
|Enable Connection Draining|インスタンスが実際に切り離されてから、すでに確率しているコネクションを何秒間維持するか|

## タグ
任意のタグの設定をする。
別にしなくてもいいが、今回は[Name]タグに[test-web-elb]とした。

![3-6_tags.png](https://qiita-image-store.s3.amazonaws.com/0/34930/105e2aaa-287d-544a-3a9c-d17efd6a89bd.png)

## 設定確認・作成完了
最後に設定を確認後[Create]ボタンで作成完了。
リストから今作成したELBを選択し、下側にでてくるタブの中から[Instances]を選択後、[Status]項目が[InService]となっていればok![OutOfService]と表示される場合はまだヘルスチェックが通っていない。

設定によっては、多少InServiceになるまで時間がかかる。
それでも認識されなければ[Edit Instances]ボタンからインスタンスを未選択にして[Save]。その後再度、[Edit Instances]からインスタンスを選択して[Save]してみよう。

それでも、[OutOfService]の場合はEC2インスタンスのセキュリティーグループがELBからのアクセスを許可しているか、ヘルスチェックにつかっているパスでHTTPアクセスできるか等確認してみよう。

![3-7_ELB_Instances.png](https://qiita-image-store.s3.amazonaws.com/0/34930/e17edd7a-30e8-a757-7e49-f4f696e9e924.png "3-7_ELB_Instances.png")


# 次回
[0から始めるAWS入門④：RDS編](http://qiita.com/hiroshik1985/items/6643b7323183f82297b2)