【AWS】 ロードバランサーとAutoScaling について　no.11

![AWS (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d9a1d061-4050-d7b6-a2f4-0359ab8aa419.png)



こんにちは、まゆみです。

AWSについての記事をシリーズで書いています

今回は第11回目になります。

今回の記事では

<ul>
<li>AWSのロードバランサー</li>
<li>Auto Scaling</li>
</ul>

について書いていこうと思います

ではさっそく始めていきますね。

#ELBとは？

ELBとはElastic Load Balancer のことです。

以前に[第1回目の記事](https://qiita.com/Mayumi_Pythonista/items/b6b9705b53febe3cc3f8)で、クラウドサービスとオンプレミスを比べた時の特長について書かせていただきましたが、ELBを活用する事によって、

>障害に強く

>スケーラブルな(拡張性の高い)

システムを構築する事ができます

##ELBの役割

![VPC (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a62f5b9a-e2db-b6c9-13e8-b89a72501329.png)

あなたが、一つのサーバーだけでサイト運営をしているとします

平均的に1時間に1000人の人がアクセスするから、それに耐えられるサーバーをと。。。

それは最善の策でしょうか？

ある時間によっては、一時的にでもアクセスが爆増する事もあるかも知れません。

また、サーバーがクラッシュしてしまったらどうでしょうか？

ELBであらかじめリスクヘッジをしておけば、そのような事に対処できます。

>①ELBに関連付けられたEC2インスタンスにトラフィックを均等に配分して、負荷を軽減させることができます

>②何かの理由で、サーバーがクラッシュした時に、(ヘルスチェックという)切り離しをしてくれる

では、さらに既存のサーバーに均等に振り分けるのでも足りないくらいアクセスが増えた時はどうでしょうか？

その時の対処法を下記に書いていきます


#Auto Scalingとは？

Auto Scaling とは必要に応じて、インスタンス数を増減させてくれるサービスです


![2021-05-09_12-17-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/54e5a471-4781-1282-d91a-0a41ad668701.png)
引用元：AWSドキュメント

#Auto Scaling に実際触ってみる

では、実際にAWSのコンソールからAuto Scaling を使ってみましょう

まずは、テンプレートを作ります

![2021-05-09_17-30-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/cd5ddef9-5e34-6c8f-deab-64c31c7e5dcb.png)

下のような画面になりますので、例にならって記入してみてください。


![2021-05-10_10-32-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b6f0aeee-9bfb-6215-dba5-284a020f79cc.png)


![2021-05-09_17-52-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a049a915-79c7-d652-07ac-24d24d0fef23.png)

そのままスクロールしていくと『高度な詳細』と書いてあるところがあるので、<font color="Red">そこを開いて一番下のユーザーデータに下のコードをコピペ</font>してみてください。

ユーザーデータとは以前に[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/6913fa857f5b75d3db8e#ec2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%9C%E3%82%8B)でも説明させていただきましたが、 <font color="Red">インスタンスが最初に起動させられた時に実行されるコード</font>になります。

下記のコードの詳しい解説は割愛させていただきますが、下記のコードをユーザーデータにコピペしておくことで、このインスタンスを起動させた時に、『当該インスタンスが、どこのサブネットに存在しているか』を示させることができます
 
```
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
EC2AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone) 
echo '<center><h1>This Amazon EC2 instance is located in Availability Zone: AZID </h1></center>' > /var/www/html/index.txt
sed "s/AZID/$EC2AZ/" /var/www/html/index.txt > /var/www/html/index.html
```


![2021-05-09_17-38-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/ee3978e5-7fc7-5321-3cf8-db5d12a9b274.png)


EC2のダッシュボードに戻り、一番下の『Auto Scaling グループ』を開きます


![2021-05-09_17-56-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/62d9ad29-e443-3247-7e46-8b487497376e.png)


![2021-05-09_17-58-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/bb24faf9-92a1-5f54-cb9a-4d0faedabd19.png)

下のスクショの例にならって選択します。
サブネットは全て選択します。(Auto Scale によってインスタンスが作られる時、どのサブネット内に作られるかを決めることができます)

『次へ』をクリックします


![2021-05-09_18-04-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/f843a51d-1fb2-ed2a-7765-dd05124e3b85.png)


下のようなページになるので、そのまま何も変えずに『次へ』をクリック
![2021-05-09_18-09-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/c0576c59-439d-debc-8c0a-ad17085d4ac2.png)

最小キャパシティと最大キャパシティを２にして、次へ進みます

![2021-05-09_18-11-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d0312768-c736-dbd7-822d-02dea0b355dc.png)

あとは最後まで何も変えずに『次へ』をクリックし続けて、Auto Scalingグループを作ってください。

![2021-05-09_18-14-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/1a4724e8-ecd6-5f7d-8eb4-d3ae09f5b182.png)

正常に作られた後、Auto Scaling グループの詳細を見てみます

アクティビティのタブをクリックして開くと、EC2が2つ作られているのが表示されています

![2021-05-09_18-17-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/34e220f7-0237-fa1a-b81d-0f39e26ddebd.png)

また、インスタンスも、各サブネットに２つづつ作られました。

![2021-05-09_18-21-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/16a92d93-9fbc-1318-0d7f-7fb342e413f7.png)

先ほどユーザーデータにコピペしたコードが上手く実行されるか見てみますね。

![2021-05-10_9-30-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/8c8895bf-e467-be80-b965-1cb4ec3898ef.png)

うまく行っています
![2021-05-10_9-31-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/9b740bc2-437a-472a-ed7c-29f5cff65d1e.png)

では、次にロードバランサーに触れていきましょう

#ロードバランサーを作る

![EC2 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/8ecfc98e-c02f-07bb-2106-7e79fb51ee8a.png)

ロードバランサーから均等にインスタンスにトラフィックが配分され負荷を減らすわけですが、<font color="Red">どのインスタンスでトラフィックを分けるか</font>決めます

それが、ターゲットグループになります

![2021-05-10_9-34-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/fd9862e7-a3db-04c3-0193-1a379fb15b88.png)

グループ詳細の指定については、特に変更なしでそのまま次に進みます

![2021-05-10_9-37-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d66366ce-e96e-df1e-8fe0-a4586d84ea01.png)


使用可能なインスタンスは全て選択します

![2021-05-10_9-37-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a9f6aa2d-2f26-8250-db7d-6ee2c44beaab.png)

少しスクロールすると、『保留中として以下を含める』と書いてあるところがあるのでそちらもクリックして選択します

![2021-05-10_9-40-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/1c2b5f61-a28e-d110-dc24-e42fe7b7d2ba.png)

ロードバランサーを作ります

![2021-05-10_9-42-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/13021896-4ee9-95db-6647-a7606979b66e.png)

ウェブアプリケーションを作っているので、『Application Load Balancer』を選択します

![2021-05-10_9-45-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a65c9491-05fe-2a2d-e521-5a1d7ecad395.png)

下のようなページに行きます。少しスクロールするとアベイラビリティゾーンを選択するところがあるので、全て選択しましょう

![2021-05-10_9-49-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b997a5ba-adc8-030d-34e9-c3aa7f77c163.png)

先ほど作ったターゲットグループを選択します
![2021-05-10_9-51-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/4669aa75-b1ba-e0fc-80d0-f2ec10533f2d.png)

後は、そのまま何も変えずに次へ進んで、ロードバランサーを作ります


ロードバランサーがどのように働くか見る前に、一応、ターゲットグループのヘルス状態が正常が見てみますね。

![2021-05-10_10-01-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/ebb8d573-5ab7-6269-c627-7a8454507ab6.png)


では、ロードバランサーがちゃんと、既存のEC2インスタンスに均等にトラフィックを割り当てているか見てみます

ロードバランサーのDNS名をコピーして、新しいブラウザーに貼り付けてみます

![2021-05-10_10-05-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/53704566-1e33-d2d0-5f4b-9f8b4f5df6d3.png)

リロードするたびに、アベイラビリティゾーン名が変わっているのが分かると思います
![2021-05-10_10-08-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/73e6f0e2-f2ab-c4e5-f4d3-07db9706bb5a.png)

![2021-05-10_10-09-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/5e33ac38-d924-a71d-1f5f-65677ec77e85.png)

#まとめ

今回の記事はこれで締めくくらせていただきます

お役に立てれば幸いです。