【JAWS-UG関西女子会】#2 ELB+EC2+RDSでECサイトをつくろう　～ELB作成編～

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-65307172-1', 'auto');
  ga('send', 'pageview');

</script>

# はじめに
この記事はJAWS-UG関西女子会「はじめて女子応援企画！事例から学ぶもくもく＆もぐもぐ会」で
 ~~もぐもぐ~~ [^1] もくもくする際のテキストとなります。
[^1]: 節子！それは懇親会や！！


# 本記事での目標

* EC2でWEBサーバーを構築すること
* RDSでデータベースサーバを構築すること
* EC2インスタンスへEC-CUBEインストール及び疎通確認
* ELBでWEBサーバーの負荷分散をすること

以下のような構成となります。
![ELB000301.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/bfbe37b4-4139-c507-2771-acf45bebd268.jpeg)

# EC2でWEBサーバーを構築すること
[こちらを参照して下さい](http://qiita.com/naotinn74/private/fd1fcf19c8689de417c8)

# RDSでデータベースサーバを構築すること
[こちらを参照して下さい](http://qiita.com/naotinn74/private/f98e87b3674b1bd4cdd5)


# ELBでWEBサーバーの負荷分散をすること
### ELBでWEBサーバーの負荷分散をするまでのながれ

2. セキュリティグループの設定
3. ヘルスチェックファイルの設置
4. ELBの作成・設定
5. ELBを介しての疎通確認

# ELBの用語について
<dl>
  <dt>ELB：</dt>
<dd>Elastic Load Balancerの略<br>
<dd>負荷に応じてELB自身のスペックアップが自動でされます</br>
<dd>※本手順では独自ドメインとの割当て方は省いています。<br>
<dd>独自ドメインをしたい場合はサポートメンバーに言ってください！！</dd><br>
  <dt>ヘルスチェック：</dt>
  <dd>ELBで負荷分散しているサービスが正常に応答をしているかを判断すること</br>
　<dd>ヘルスチェック応答がない場合、ELBは通信をそのサーバへ流さないようにする</br>
　<dd>切り離しをするわけではありません</dd><br>

</dl>

# 構築手順
## 1.セキュリティグループの設定
<p>　</p>
1.1.ELB用セキュリティグループに自分のIPからの通信許可設定をします。
ELB用セキュリティグループを選択してEditボタンをクリックします。
![ELB000265.png](https://qiita-image-store.s3.amazonaws.com/0/85659/97e83857-a89a-df90-a07c-617d86976275.png)

<p>　</p>
1.2.Typeは「HTTP」をSourceは「My IP」を選択して「Save」ボタンをクリックします。
![ELB000266.png](https://qiita-image-store.s3.amazonaws.com/0/85659/108977c7-93a0-eeef-3a7e-912764f8ad58.png)


<p>　</p>
1.3.次はWEBサーバー用セキュリティグループにELBからの通信許可設定をします。
![ELB000267.png](https://qiita-image-store.s3.amazonaws.com/0/85659/7a599ad8-521a-c9cf-f9f9-b72b8b35c517.png)

<p>　</p>
1.4.Typeは「HTTP」をSourceは「ELB用セキュリティグループ」を設定します。
![ELB000268.png](https://qiita-image-store.s3.amazonaws.com/0/85659/45fea515-2632-1094-1030-ddca890d74d8.png)


<p>　</p>
1.5.「Save」ボタンをクリックします。
![ELB000269.png](https://qiita-image-store.s3.amazonaws.com/0/85659/01956c60-ef11-5fb3-673c-309f48fad2de.png)



## 2.ヘルスチェックファイルの設置
<p>　</p>
2.1.WEB01にSSH接続して以下のコマンドを実行します。

```
vi /var/www/html/health.txt

Working!　←を入力して保存します

```
<p>　</p>
2.2.ブラウザでアクセスできることを確認します。
![ELB000270.png](https://qiita-image-store.s3.amazonaws.com/0/85659/99527cd8-14c5-d2da-ba28-780e9cff79c6.png)


2.3.WEB02にも同様の設定をします。

##3.ELBの作成・設定
<p>　</p>
3.1.EC2の左メニューで「Load Balancers」をクリックします。
![ELB000271.png](https://qiita-image-store.s3.amazonaws.com/0/85659/f5c9b63e-84da-71dd-2fdd-e881ba280352.png)

<p>　</p>
3.2.「Create Load Balancer」ボタンをクリックします。
![ELB000272.png](https://qiita-image-store.s3.amazonaws.com/0/85659/bd42da39-6068-d2e8-21ac-20b5f2002288.png)

<p>　</p>
3.3.Load Balancer Nameを入力し、Enable advanced VPC configurationにチェックを入れます。
![ELB000273.png](https://qiita-image-store.s3.amazonaws.com/0/85659/10b96a5e-08a5-35a7-a5f8-eb92438c3bd0.png)

<p>　</p>
3.4.Select Subnetsで負荷分散対象サーバーがあるサブネットを＋ボタンをクリックして選択します。
![ELB000274.png](https://qiita-image-store.s3.amazonaws.com/0/85659/a7879f96-9cac-00fb-6920-c195b277c053.png)

<p>　</p>
3.5.もう一つのサブネットも選択します。
![ELB000275.png](https://qiita-image-store.s3.amazonaws.com/0/85659/6878cea7-01fc-7afd-4a41-96aefee810c8.png)

<p>　</p>
3.6.「Next…」ボタンをクリックします。
![ELB000276.png](https://qiita-image-store.s3.amazonaws.com/0/85659/c7a0db38-a1f6-fc18-fd43-2025d3792943.png)

<p>　</p>
3.7.ELBのセキュリティグループをここで割り当てます。
作成したELB用セキュリティグループを選択し「Next…」ボタンをクリックします。
![ELB000277.png](https://qiita-image-store.s3.amazonaws.com/0/85659/1ed7ff27-b047-a578-9e70-40a8e497b29e.png)

<p>　</p>
3.8.セキュリティの警告が出ますが「Next…」ボタンをクリックします。
![ELB000278.png](https://qiita-image-store.s3.amazonaws.com/0/85659/9833304b-aa40-5ab1-5df5-ca9dadd1eb75.png)

<p>　</p>
3.9.ping pathに「/health.txt」と入力し、Healthy Thresholdは「2」を選択し「Next…」ボタンをクリックします。
ping pathに入力されたファイルからの応答があればELBはサーバが正常にサービスが上がっていると判断します。
Health Check Intervalで指定された秒数間隔でELBはサーバへヘルスチェックを行います。
Unhealthy Thresholdで指定した回数応答がなかった場合にELBはサーバが異常であると判断し、通信を流さなくなります。
ELBの配下に組み込んだあとにHealthy Thresholdで指定した回数の応答があればELBはサーバのサービスが正常であると判断し、通信を流すようになります。
![ELB000279.png](https://qiita-image-store.s3.amazonaws.com/0/85659/a3c5fb21-45b8-a977-8353-0f4f8d066b69.png)

<p>　</p>
3.10.ELBの配下に組込むEC2インスタンスを選択します。
WEB01とWEB02にチェックを入れ「Next…」ボタンをクリックします。
![ELB000280.png](https://qiita-image-store.s3.amazonaws.com/0/85659/ce064a76-42ee-5fad-dbb9-7ed8192820c4.png)

<p>　</p>
3.11.タグを付けて「Review and Create」ボタンをクリックします。
![ELB000281.png](https://qiita-image-store.s3.amazonaws.com/0/85659/12b6df3f-d6db-806c-1514-bc687d789eb9.png)

<p>　</p>
3.12.内容を確認し「Create」ボタンをクリックします。
![ELB000282.png](https://qiita-image-store.s3.amazonaws.com/0/85659/40b79fb5-5d07-fbed-063a-cb99d49715c7.png)

<p>　</p>
3.13.「Close」ボタンをクリックします。
![ELB000283.png](https://qiita-image-store.s3.amazonaws.com/0/85659/d12e06c4-afa2-ed33-66bc-eb28b9f907f3.png)

<p>　</p>
3.14.Instancesタブをクリックします。
![ELB000284.png](https://qiita-image-store.s3.amazonaws.com/0/85659/48c6d119-1f3b-0a7c-2df9-cb4468a98387.png)

<p>　</p>
3.15.WEBサーバのStatusが「OutOfService」となっている場合はELBがサーバが正常に応答していないとみなしています。
作成したばかりなので1分ほど待ちましょう。
![ELB000285.png](https://qiita-image-store.s3.amazonaws.com/0/85659/be3eb661-c1bd-bfe8-38fa-a5ca9c9d4f42.png)

<p>　</p>
3.16.右上のリロードボタンを何度か押してみましょう。
ヘルスチェックが成功したらStatusが「InService」となります。
いくら経ってもInServiceとならない場合、設定ミスかサーバで何か以上が発生している可能性があります。
![ELB000286.png](https://qiita-image-store.s3.amazonaws.com/0/85659/7a6af46c-e4f9-9fa6-28b5-8e2d8b618f91.png)


## 4.ELBを介しての疎通確認
<p>　</p>
4.1.WEB01にログインして以下のコマンドを実行します。

```
vi /var/www/html/index.html

以下の内容を入力して保存します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

<html>

 <head>
  <title>JAWS-UG関西女子会もくもく勉強会</title>
 </head>

 <body>
  <span style="font-size : 100pt">Hello World!!</span></br>
 <span style="font-size : 100pt">from WEB01!</span></br>
 </body>

</html>
```
<p>　</p>
4.2.ブラウザで直接WEB01にアクセスしてindex.htmlが見られることを確認します。
![ELB000287.png](https://qiita-image-store.s3.amazonaws.com/0/85659/d6f84a99-806e-a61b-d668-e8130b53e404.png)

<p>　</p>
4.3.WEB02にログインして以下のコマンドを実行します。
ポイントとしてWEB02では表示内容を少し変えています。

```
vi /var/www/html/index.html

以下の内容を入力して保存します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

<html>

 <head>
  <title>JAWS-UG関西女子会もくもく勉強会</title>
 </head>

 <body>
  <span style="font-size : 100pt">Hello World!!</span></br>
 <span style="font-size : 100pt">from WEB02!</span></br>
 </body>

</html>
```
<p>　</p>
4.4.ブラウザで直接WEB02にアクセスしてindex.htmlが見られることを確認します。
![ELB000288.png](https://qiita-image-store.s3.amazonaws.com/0/85659/89c83191-cff7-524a-364a-86ec065c35c3.png)

<p>　</p>
4.5.DescriptionタブでDNS Nameに記載されているアドレスがELBのエンドポイントURLとなります。
![ELB000289.png](https://qiita-image-store.s3.amazonaws.com/0/85659/6a0b24c6-f7c2-6e70-e4b7-fdd862ab674a.png)

<p>　</p>
4.6.エンドポイントURLにブラウザからアクセスしてみましょう。
何度かリロードするとWEB01とWEB02の両方が表示されることがわかるかと思います。
![ELB000290.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/071ac63b-4125-f68a-09f3-906f7b90365e.jpeg)