AWS入門 ELBを使った負荷分散（ロードバランサー）

前 [AWS入門 EC2を使ったWebサーバー構築](https://qiita.com/tseno/items/47ae835933fd919772e6)
次 [AWS入門 Elastic IPを使った独自ドメインでのサイト運用](https://qiita.com/tseno/items/1c6303d778f9089f6f89)

# ELBを使った負荷分散

- 可用性の向上と処理速度の向上を同時に行うため、サーバの処理を負荷分散する。
- AWSが提供する負荷分散機能であるELBを使い、システム全体が停止しない仕組みを作る。

## カスタムAMIによるEC2インスタンスの生成

- OSを含むEC2インスタンスのフルバックアップのことをカスタムAMIと呼び、それをもとに複数のEC2インスタンスを起動できる。

### 1/3. カスタムAMIの作成

- EC2ダッシュボードから、AMIイメージを取得したいEC2インスタンスを選択し、一旦停止する。
- 右クリック→「イメージ」→「イメージの作成」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/14effd9a-a5fe-7dcc-b4c1-c4540d03b738.png)

- イメージ名に任意の名前を設定する。127文字まで。
- 説明は、イメージの説明を入れる。日本語は不可。255文字まで。
- イメージの作成をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/632ec520-f809-f354-527c-7e43aed44976.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/d7350f51-3107-c8fb-77a1-bc3fa3510249.png)

- カスタムAMIの確認

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/eab48040-240d-83f7-e44a-852666928f93.png)

### 2/3. カスタムAMIからEC2インスタンスの起動

- 右クリック→「作成」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/dde5f797-1d16-d90f-56a0-76a2e9f5d114.png)

- これ以降は、前回のEC2インスタンスの作成と同じ。[AWS入門 EC2を使ったWebサーバー構築](https://qiita.com/tseno/items/47ae835933fd919772e6)
- タグの名前を、`http-node1`、`http-node2`の2台のEC2インスタンスを作成する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/61b52443-2516-0dc4-4924-468474483b3b.png)

- 2台のインスタンスが作成された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/c593543c-5bfb-3bae-2598-8363c62f1e2b.png)

### 3/3. 動作確認

- 2台のどちらにアクセスしているか確認のために、サイトの一部を書き換える。
- SSHでログインして、`/var/www/html/index.html`を修正する。

```sh
$ ssh -i ~/.ssh/AWSkeypair.pem ec2-user@IPアドレス
$ sudo vim /var/www/html/index.html
```

- サイトが書き換わったことを確認する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/0229989c-d58f-881e-8f13-004406eeb00c.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/bcd839ff-f67d-c648-b56b-c3aa7f5df134.png)


##　ELBによる負荷分散システム構築

### 1/8. ロードバランサーの作成

- `http-node1`、`http-node2`を両方起動する。
- EC2メニューから、「ロードバランサー」→「ロードバランサーの作成」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/5b672048-8773-5487-f2f1-83f082763398.png)

- 本の情報が古いので、Classic Load Balancerの「作成」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/7d98c3ca-6af3-b72e-7745-70292b678069.png)

### 2/8. ロードバランサーの定義

- ロードバランサー名を「http-ELB」とした。
- ロードバランサーのネットワークが、「デフォルトVPC」のまま。
- セキュリティグループの割り当てをクリック。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/a4b3db52-0abb-4d97-332d-d532fbdaf02c.png)

### 3/8. セキュリティグループの割り当て

- 80番ポートを通すように、セキュリティグループを作成する。
- セキュリティグループ名「ELB-SecGP」、説明「ELB Group」とした。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/954ce551-1aa8-7f01-5376-3650c5278627.png)

### 4/8. セキュリティ設定の構成

- ELBではSSL証明書をインストールすることで、HTTPS通信が有効になる。ここでは、HTTPのみなので、そのまま「ヘルスチェックの設定」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/61ab9e61-9a96-c6b4-caea-25ea0c5e3c0b.png)

### 5/8. ヘルスチェックの設定

- 今回はこのまま、「EC2インスタンスの追加」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/4d00a7d4-79e5-3fb8-8b89-0a65e3ad1818.png)

### 6/8. EC2インスタンスの追加

- `http-node1`、`http-node2`を選択して、「タグの追加」をクリックする。
 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/35c06bb0-f6b3-c58f-abcc-f035e4efb2af.png)

### 7/8. タグの追加

- タグを「Name = WebSample-ELB」とした。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/536d998f-8b02-a62f-0fdf-affb0d2ca423.png)

### 8/8. ロードバランサーの作成

- 確認して、「作成」をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/669520f7-158a-8971-dc86-523d544284aa.png)

- ロードバランサーが作成された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/aacfa989-bb3f-ab9a-7429-ae3de96fe2dd.png)

## ELBの動作確認

- インスタンスが2台とも「InService」になっていればOK。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/c8684107-94db-4c7c-e16d-c8e34e41c8d4.png)

- ブラウザからDNS名にアクセスするとタイミングによって、`http-node1`、`http-node2`に割り振られているのがわかる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/be980fcc-f8cb-d0be-40ac-3befc8ddf4e3.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/61170f62-fc57-36d3-8cf6-ca35054bc818.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88686/ce208e04-64a5-df2a-6776-9df5d0fd281f.png)

- やってみると、そんなに難しくないですね。

参考
[Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門](https://www.shoeisha.co.jp/book/detail/9784798144696)