はじめてのAuto Scaling

## Auto Scalingとは？

EC2を利用して、自動的にサーバを増減してパフォーマンスを最適化してくれるサービスです。
詳細は [こちら](https://qiita.com/miyuki_samitani/items/e2ed947072c3984f8ca0) をごらんください

## 概要

- 目次

1. AMIを作成
2. ターゲットグループの作成
3. ロードバランシングの作成
4. Auto Scalingの起動設定を作成
5. Auto Scalingグループの作成
6. テスト

- イメージ図

ALBはAZが複数必要なので2つ作成しました。

![1# はじめてのAuto Scaling - diagrams.net - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/91c0ef22-0b9d-d4ca-ebea-8a19e685d2c1.png)


## 作成

### 1. AMIを作成

- EC2インスタンスを作成

とりあえずAmazonlinuxのt2.microでEC2インスタンスを作成しました。

- httpdの設定

```
sudo su -
yum install httpd
systemctl start httpd
systemctl enable httpd

vi /var/www/html/index.html
==========
<h1>hello world!!!!</h1>
==========
```

- ブラウザからwebサイトが見えることを確認

http://[IPアドレス]/index.html

![0Mozilla Firefox 2021-04-06 23.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/392ae066-0374-d5c3-0d72-82df29690a90.png)


- EC2インスタンスのイメージを作成

設定を行った、EC2インスタンスにチェックをいれて
アクション > イメージ > イメージの作成 からAMIを作成する

![0インスタンス _ EC2 Management Console - Google Chrome 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ee630b64-21da-78f0-9cbc-55ddf53ef8e8.png)


- AMIの設定

イメージ名と説明を入れて作成を行います

![00インスタンス _ EC2 Management Console - Google Chrome 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/6f3bd24c-c573-03b3-8c04-caf01754fd8b.png)


- 作成中

ステータスがpendingになっています

![000AMI _ EC2 Management Console - Google Chrome 2021-.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/7d2e10cb-ddcd-2bee-586b-18f2ef0bafd0.png)


- 作成完了

ステータスがavailableになりました

![0000AMI _ EC2 Management Console - Google Chrome 2021-.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a2f653f7-e577-6716-463e-ea3d125378bf.png)



### 2. ターゲットグループの作成

- 移動

EC2 > ロードバランシング > ターゲットグループ からターゲットグループの作成を行います

![1Target groups _ EC2 Management Console - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/c845f184-17d6-55e0-50d7-0273af9dab5c.png)


- ターゲットグループの作成

ターゲットグループ名とターゲットの種類、
またヘルスチェックのパスを先ほど作成した `/index.html` に指定します

![2ターゲットグループ _ EC2 Management Console - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ed0719fd-b649-1e8d-4860-4b872fc89d87.png)



- ターゲットグループが作成されました

![3ターゲットグループ _ EC2 Management Console - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/996b76be-afe5-2b5e-3ce3-00336e918e85.png)


### 3. ロードバランシングの作成

- 移動

EC2 > ロードバランシング > ロードバランサー からロードバランサーの作成を行います

![4ロードバランサー _ EC2 Management Console - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/dd0b8278-e9d1-dbe2-1431-cd009955999a.png)


- ロードバランサーの種類

今回はwebサーバを作成してロードバランシングしたいので、ALBを作ります

![5ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ff335107-8610-6dbd-0b28-4fbbe07d4bb7.png)


- ロードバランサーの設定

ALBはAZが2つ必要なので、2つ設定します。

![6ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/f5b0785f-d7f3-5027-1575-551722ad9efd.png)


- セキュリティ設定

↑でリスナーを443(https)にしていたらこちらで証明書などの設定が必要なのですが、
今回はAutoScalingがメインなので80番ポートで通信させます

![7ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/59782aef-038c-e6af-662d-f76298e92afa.png)


- セキュリティグループの設定

ALBに来るアクセスに対してのセキュリティグループの設定です。
一旦、今あるものをここでは使ってますが、
80番ポートがあいていればOKです

![8ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/9aadbf2b-d32f-5a3f-f02c-9cff842aaa51.png)


- ターゲットグループの設定

先程作成したターゲットグループを選択します。
するとグレーアウトになっている部分はデフォルトで入ります。

![9ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/fade07f1-5b8a-4163-0ab4-2a2f12d00163.png)


- ターゲットの登録

通常であればターゲット(インスタンス)が存在していれば登録が出来るのですが、
現在はまだ出来ていないので登録できません

![10ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/f4be165d-ceb9-16f3-9b47-960e93af6a4b.png)


- 確認

作成したALBの設定が認識通りか確認してください

![11ロードバランサーの作成 _ EC2 Management Console - Google Chro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/d742f94f-932a-ffa8-ecd3-c1e0a57d06af.png)


- 作成完了

ALBが作成されました

![12ロードバランサー _ EC2 Management Console - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/b0d2aa5b-b844-324c-be06-72163b8a631d.png)
 

### 4. Auto Scalingの起動設定を作成

- 移動

EC2 > AUTO SCALING > 起動設定 から起動設定の作成を行います

![13EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/008c5628-fddb-d4d1-7dd9-7f155bb82453.png)


- 起動設定の作成

起動名はわかりやすいものを。
AMIは 今回は一番最初に作成したEC2インスタンスのAMIを使います
インスタンスタイプは t2.micro 

![14EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/2a57e62e-ca54-259c-682a-5cbbd7ddc546.png)



追加設定は特に何もせず、デフォルトのままいきます

![15EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/84bbdd1d-fe12-e917-459c-6e749fa1746e.png)



セキュリティグループは現在あるものを使用し、キーペアも今あるやつを使いました。
ここらへんはEC2などでも設定するので何も触らず進めます

![16EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/903dce75-4a93-82ba-9052-6b404512d4d9.png)


- 起動設定が完了しました

![17EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/48f87ea9-633e-0591-d7dc-0d89c89bec89.png)


### 5. Auto Scalingグループの作成

- 移動

EC2 > AUTO SCALING > AutoScalingグループ からAutoScalingグループの作成を行います

![18EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/9db4a46e-a565-fb12-0343-8994a1399bfc.png)


- 起動設定の選択

AutoScalingグループ名を記載します。
また、起動設定に切り替えて先ほど作成した起動設定を選択します

![19EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/d1c7bc63-6e73-21e4-ba04-17161d10d7ec.png)


- 設定の構成

VPCはALBをおいたVPC。
また、サブネットもALBで設定した2つのAZのサブネットを記載します

![20EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/10164ea1-ea05-edc1-4b04-bba9212bbc2c.png)


- 詳細オプションを設定

ロードバランシングは↑ですでに作成しているので、既存のロードバランサーにアタッチします。
また、ターゲットグループも作成しているので、既存のロードバランサーターゲットグループにアタッチを行います。
ほかはデフォルトで行きます

![21EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/78bb0495-7fa8-4978-1d11-24c0709b3461.png)


- グループサイズとスケーリングポリシー

スケーリングしてもらいたいので、グループサイズの最大キャパシティとスケーリングポリシーを変更しました

![22EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/45220e6f-6cc3-7aa6-3925-f1dd8f058cfc.png)


- 通知設定

通知はさせないので、設定しません。

![23EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/fffd59de-94c0-2f43-b6ba-401427f13acc.png)


- タグ設定

タグも必要ないので設定しません

![24EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/e53972ff-cbdc-55f2-7de6-297734986488.png)


- 確認

今の設定が問題ないことを確認して設定を作成します

![25EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/e8b84fe1-ec0c-0e05-3d1d-dabd132cc75b.png)



- 作成完了

作成出来ました

![26EC2 Management Console - Google Chrome 2021-04-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/705e6c4b-1fa5-f8bf-6d8b-346ff5a2e425.png)

- ELBへのヘルスチェックも確認します

EC2 > ロードバランシング > ターゲットグループ > Autoscaling-ALB-TargetGroup > ターゲット から
ターゲットの確認ができます。
ターゲットが `healthy` になってることを確認します

![27ターゲットグループ _ EC2 Management Console - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a434423a-add3-cf10-9c01-ebe9f22e0d5c.png)


- 接続確認

本来なら、Route53にALBを紐付けて・・・みたいなことをしたいのですがそこまで用意できなかったので、
localのサーバでALBのIPを確認し、それに対してブラウザで表示できるか確認します

EC2 > ロードバランシング > ロードバランサー > Autoscaling-ALB > 説明 のDNS名をコピーします。
そのDNS名をlocalのサーバで以下のように確認すると、IPアドレスが出てきます。

```
dig [DNS名] +short
==========
xx.xx.xx.xx
xx.xx.xx.xx
==========
```

↑で出てきたIPアドレスをコピーしてブラウザから
`http://[IPアドレス]/index.html` で確認します。
下記のように表示できたらOKです。

![28Mozilla Firefox 2021-04-07 00.07.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/92263dc0-036b-5808-75b6-2d94a245e35c.png)


### 6. テスト

AutoScalingは負荷がかからないと台数が増えないので
内部でCPUを使うように適当なスクリプト作成します

- AutoScalingグループで確認

台数が3台になっています。

![29EC2 Management Console - Google Chrome 2021-04-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/41623daa-8912-40ef-5daf-cef5e9e2fc74.png)

- EC2インスタンスで確認

同じく新しいサーバが2台増えています

![30インスタンス _ EC2 Management Console - Google Chrome 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/7ebc60c5-76cb-25af-e920-91e6cbd3b17d.png)

- ターゲットグループで確認

ターゲットグループ配下にいるサーバが3台に増えました

![31ターゲットグループ _ EC2 Management Console - Google Chrome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/9dd94450-0060-03a5-9d4d-8811bd730a69.png)

負荷をかけるとサーバが増えることを確認できました。

## 勉強後のイメージ

結構セキュリティグループとかヘルスチェックとかでつまづいたりした。
画像がもしかしたらちぐはぐな所あるかもですが、いい感じに読み替えてください。
なんとなくイメージはわかってたけど、ちゃんと増えるんだなってのはわかってよかった。