【AWS構築】ALB+マルチAZのEC2構成ハンズオン

# 構築・確認したいこと

・マルチAZサブネット内のEC2にALBを経由してロードバランシング設定し、トラフィックが分散されていることをテストする
・ヘルスチェックでEC2の死活監視(80番のサービス応答チェック)し、死んでいるサーバーにはトラフィックを投げないことをテストする



# 構成図イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/ca055d16-6267-44b1-934c-9a8630825fa5.png)


# 前提
・EC2はApache導入して80番ポートでhttp
・EC2のAutoScalingもバランシング対象
・ALBへのアクセスはRoute53のエイリアスレコードを使用

VPC・サブネット・EC2は作成済みとします。


## 構築

### AWS

#### ターゲットグループ作成
基本的な設定で以下を入力
ターゲットタイプ：インスタンス
ターゲットグループ名：任意の名前
プロトコル、ポート：HTTP/80
VPC：作成したVPC
プロトコルバージョン：HTTP1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/b7699a27-23b1-4eae-9272-e6096ff4280a.png)

ヘルスチェックで以下を入力
ヘルスチェックプロトコル：HTTP
ヘルスチェックパス：/

:::note
ドメインのルートに対してヘルスチェックを行うことを意味しています。
ドメイン内の特定のページにヘルスチェックをかけたい場合はパス指定する
:::

また、ヘルスチェックの詳細設定でヘルスチェック間隔や正常とみなすコードなどを変更できるが今回は変更しない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/94ee5de4-f0db-4cca-b464-05bcbf4d7352.png)


次に「ターゲットを登録」画面に移動するのでALBの背後に配置するEC2を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/ca128e6d-1ca6-4e5b-8189-f9264666f750.png)

ターゲットを確認内に含まれていれば『作成』をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/ee9c77bc-8c70-480a-a406-9397ed5398b0.png)



#### ALB設定
コンソール画面でEC2サービスを選択し、左ペイン内の『ロードバランサー』をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/5baba3e3-e483-4469-838c-d1b9a5d56eb7.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/b7a0028d-dbb0-4cc7-abc0-772877132c0d.png)


『ロードバランサーの作成』をクリック
ロードバランサータイプで『ApplicationLoadBalancer』


基本的な設定で以下を入力
名前：任意の名前
スキーム：インターネット向け(外部からEC2にアクセスする必要があるため)
IPアドレスタイプ：IPv4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/44096283-5b9f-4265-b37b-d845772cd0a0.png)


ネットワークマッピングで以下を入力
VPC：作成したVPC
AZとサブネット：2つのAZを選択

:::note
ALBは必ず2つ以上のAZに紐づける必要性があります。

また、ALBは自動スケーリング機能のためにサブネット内のIPアドレスを8個以上使用する。
ALBを紐づけるサブネットにはIPのCIDR設計に余裕を持たせることに注意
:::


セキュリティグループは必要に応じてアタッチする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/03f43573-4f25-43e0-ac29-5cd52e7dd4a3.png)

今回は検証のため、デフォルトのものを使用
『作成』をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/a0db10f7-b492-43cd-a58d-1ad1a09ece01.png)
↑正常に作成された


#### EC2のApache構築
⭐2つのサーバーに同様の設定を行う。

対象サーバーにSSH接続を行う。

Apacheをインストールする。
```bash
yum install httpd
```

テスト用のindex.htmlファイルを配置する。
```bash
cd /var/www/
touch index.html
vim index.html
```

```index.html
<html>
	<head>
		<title>これはテストです。</title>
	</head>
	<body>
		<p>このページが見えるのはおかしいよ。</p>
	</body>
</html>
```

Apacheの設定を確認＆変更
```bash
less ./etc/httpd/conf/httpd.conf | grep Listen
```
ポートは80指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/1ed1a226-6d58-497e-bd48-78802e985229.png)

```bash
less /etc/httpd/conf/httpd.conf | grep DocumentRoot
```
ドキュメントルートはデフォルトで、/var/www/html　なので/var/wwwに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/362c3e3e-bbbb-4757-8c4b-5622d98fa46d.png)

httpd -tコマンドでApache設定ファイルの構文チェックが可能
```bash
http -t
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/6a9dddad-92e9-46c1-9a3b-147a03947313.png)

:::note
エラーが発生している場合はエラー文も表示されるので便利
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/ece49378-d8ed-40f8-a464-8a85ae3b082e.png)
↑設定ファイルのsyntaxエラー
:::

Apacheを再起動
```
systemctl restart httpd
systemctl status httpd
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/38a4b744-8013-424a-ac67-8c90c39116ce.png)
↑activeになっていればよい


#### EC2のセキュリティグループ設定
EC2のセキュリティグループにはALBからのHTTP/HTTPSトラフィックを許可
ALBのSGを許可するのが一番手っ取り早いかも
（死活監視も失敗する）


## 確認

### 死活確認
80番ポートにhttpが起動しているのでALBの死活監視が『healthy』になったことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/465e8d2e-aff4-4890-9bbd-1d070ca93d99.png)
(めんどいので1つしかApache設定していないため、片方は異常）


### ブラウザでALBのDNSを叩く
ALBの詳細画面にある『DNS名』をコピーしてブラウザのURLに張り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/552582ef-5bf3-4e97-8e8e-1adcbd33bfb9.png)

index.htmlに記載したpタグが表示されているので成功！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/214aaf54-89c0-4c80-9e3f-94c1a6960b0f.png)

また、何回か更新をしてみるがエラーとなることはなかった。
⇒つまり、異常が表示されているEC2にはトラフィックは分散されていない。


## 次やりたいこと

・ドメイン取得してALBに紐づけ