【AWS Auto Scaling】ELBの組み合わせたオートヒーリング構築）

##目標
ELBとAutoScalingを組み合わせ、障害時にもバックエンドインスタンス数を維持する仕組みを構築する（いわゆるオートヒーリングのみで、トラフィックに応じたスケールイン・アウトの仕組みは構築しない）

##前提
ELB、及びそれに紐づくターゲットグループを構築済みであること（※）

※以下記事で作成を実施済み
[【ELB基本設定】 ELBを作成し、httpアクセスをロードバランシングする](https://qiita.com/aWdfcfG2jLr73pe/items/e3331567ad0c34978159)

##手順
###1. 起動設定（Launch Configuration）作成
**①[EC2コンソール](https://ap-northeast-1.console.aws.amazon.com/ec2/)の左枠にある`起動設定`をクリック後、`起動設定の作成`実行**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/eef097c0-8800-140c-9bef-24ea29e1bd5f.png)
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/135466af-ddce-43ca-ab19-c3434ce8a96a.png)
**②AMIの選択、インスタンスタイプの選択を行う**
**③起動設定（Launch Configuration）の詳細設定を行う**

**＜設定内容＞**
名前：　**任意**
ユーザデータ：　**httpd自動起動用スクリプト（※下部記載）**
アドレスタイプ：　**パブリック IP アドレスを各インスタンスに割り当てます。**（※複数サブネットでのELB負荷分散を行っていない場合、デフォルト設定のままでOK）
それ以外：　**デフォルト設定**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/ff812c47-3353-9e89-8592-52e95a71cd39.png)
※httpd自動起動用スクリプト

```bash

#!/bin/bash
yum update -y
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum install -y httpd mariadb-server
systemctl start httpd
systemctl enable httpd
usermod -a -G apache ec2-user
chown -R ec2-user:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
echo `hostname` > /var/www/html/index.html
```

**③セキュリティグループの設定**
http80番ポートが開いているセキュリティグループを利用（httpをロードバランシングさせているため。通信内容に応じて設定は変わる）
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/6b2e0469-3dcd-6c80-0076-e10b9a42ef9d.png)

**④設定内容確認後、起動設定の作成をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/8ee07747-ad6f-c327-b399-8d66c18db1c6.png)

**⑤キーペアの設定を行う**
**⑥正常に起動設定が作成されていることを確認**
<img width="960" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/168f4fc1-07fd-ed2f-fd52-7108d339c7b8.png">

###2. Auto Scalingグループの作成
**①Auto Scalingグループの作成をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/4381ff32-9eea-9d0b-3c86-f49a702c0432.png)

**②新しく作成するAuto Scalingグループと起動設定を紐づかせる**
前述の手順で作成した起動設定にチェックを入れ、次のステップへ
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/fa913e47-59fb-fb6d-5c67-b791fed30b6e.png)

**③Auto Scalingグループの詳細設定を行う**
**＜設定内容＞**
グループ名：　**任意**
グループサイズ：　**任意（Auto Scaling開始時のグループ内における希望インスタンス数を設定）**
ネットワーク：　**ELBが存在するVPCID**
サブネット：　**ELBの振り分け先として指定されているサブネットID**
ロードバランシング　：　**ひとつまたは複数のロードバランサーからトラフィックを受信する**
ターゲットグループ：　**対象ELB配下のターゲットグループ**
ヘルスチェックタイプ：　**ELBにチェック**

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/b3bf3ac2-f151-111b-4870-fec064b95219.png)

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/129add37-c7b5-84fc-a506-c1e9f38b1b04.png)

**④スケーリングポリシーの作成**
今回はインスタンスを維持することのみが目標のため「このグループを初期のサイズに維持する」にチェック
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/52a3c411-ce6d-c3f9-0992-288365d79644.png)

**⑤通知の設定（任意）**
必要あれば通知設定を行う（指定したイベント発生時、メール通知がくるようになります）
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/1f0f6791-8cb6-0be5-07d5-124a8b55c03a.png)

**⑥タグの設定（任意）（※）**
※「新しいインスタンスにタグ付けする」にチェックを入れると、AutoScalingによって起動されたインスタンス全てに自動でタグが付きます
<img width="960" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/f3c64924-8dde-cd8b-6a2e-d35147e3590e.png">

**⑦設定内容確認後、Auto Scalingグループの作成をクリック**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/ed050b47-8b35-7e7a-e6a0-b8c5de77f06a.png)

**⑧作成したAuto Scalingグループが作成されていること、及びグループのインスタンスのヘルスステータスが「Healthy」であることを確認**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/4d066595-4def-95ce-b869-77f66f707d41.png)

**⑨ロードバランサーのターゲットグループにも、Auto Scalingによって起動されたインスタンスが存在していることを確認**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/09fd704e-9f00-4a96-34cd-aedd83e2b466.png)


###3. 動作検証（オートヒーリングの確認）
**①AutoScaling内のインスタンスにログインし、httpdを停止する**

```
[root@ip-172-31-39-108 ~]# systemctl stop httpd
[root@ip-172-31-39-108 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset                                                                             : disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           mqphp-fpm.conf
   Active: inactive (dead) since Tue 2020-06-02 11:12:08 UTC; 1min 21s ago
     Docs: man:httpd.service(8)
  Process: 3616 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, st                                                                             atus=0/SUCCESS)
 Main PID: 3616 (code=exited, status=0/SUCCESS)
   Status: "Total requests: 68; Idle/Busy workers 100/0;Requests/sec: 0.0687; By                                                                             tes served/sec:  33 B/sec"

Jun 02 10:55:26 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Jun 02 10:55:27 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Jun 02 11:12:07 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Jun 02 11:12:08 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Hint: Some lines were ellipsized, use -l to show in full.
```

**②httpdを停止したインスタンスが終了しても、Auto Scalingグループ内のインスタンス数が維持されることを確認**
![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/74cdf329-9960-9d83-274e-e38293cf2ed7.png)
⇒インスタンスが２つヘルスチェックに失敗し、終了中となってるが、グループ内インスタンス数は４つ維持されているためOK