AWS Auto Scaling

内容
・趣旨目標
・教材
・使用できるサービス
・目指す構成（基準）
・CloudFormation（ハンズオン開始）
・EC2の起動テンプレートから作成
・Auto Scalingグループを作成
・Auto Scalingのスケジュール設定
・Auto Scalingの動的スケーリング設定
・EC2へ負荷をかけ、スケールアウト
・負荷を停止し、スケールイン
・EC2インスタンスのヘルスチェックを検証
・リソースの削除



## 趣旨目標
実際に触れることで理解の深化！困った箇所や勉強になった箇所を中心に記録します。

## 教材

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Auto_Scaling-2022-reg-event.html?trk=aws_introduction_page

※私の場合、無料枠内でハンズオンできたので記事を参考にされてください！


## 使用できるサービス
AWS CloudFormation,VPC,ALB


## 目指す構成（基準）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/78e7efbe-7c13-78b7-5e1e-bfa3269e913e.png)


## CloudFormation（ハンズオン開始）
「新しいリソースを使用」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/a062ac83-3548-ad38-a2f8-3e2f85c52df9.png)

コードはハンズオンサイトからダウンロード。
以下参考です。VPC,EC2,ALB,subnetを設定することで、165行になります。
このコードを作るのに苦戦しなければ多数のセットを作る場合、早くセットアップできそうですね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/cabb40d0-df45-e3b9-4eab-d1aa58fb346c.png)

ファイルをアップロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/cf6d761d-f65f-317e-2c7d-51e68f0a671e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d0109c4f-dde4-3510-614c-5be06bc0fae0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/7aa44444-32d2-36cd-8cba-f00f92a2e999.png)
あとはデフォルトで進みますが、次の図のように作成失敗した時の挙動を設定できるみたいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/2fb41e66-5560-06d4-0c12-5a40370aca3e.png)

あとは、スタック作成のオプションとしてタイムアウトを設定できますね。課金に影響するので、作成したばかりのコードを使用する際などは設定した方がよさそう。

はい、公式さんとUIが違いすぎて(-_-;)
図のように順次リソースが作成されていく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/0fcb7271-631b-7258-fc19-74ff3ce7a4c3.png)
完成（あっという間です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/0e79a6a7-191c-da78-0ab1-7992ec741a13.png)

現状まだEC2は出来上がっていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/0c09a972-52fe-e90e-d6ad-99195543caf1.png)

## EC2の起動テンプレートから作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/0e2a8936-3ffb-4c8e-5619-80ae6d0d19fa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/69072547-bd3c-c16f-c14f-a2c7145bae8e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/05f76e56-7496-db3f-e0b5-9a5c32dceb00.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4c464cfd-5636-d077-72ff-aa48b2d21a56.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/24672ec6-7fed-b4f8-7e70-c699b45756cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/1806e7f2-2c44-8a73-83bf-22b64cd75c95.png)

※下図赤枠、設定によっては料金がかかるのかな？無料枠がどこまでカバーされているのか正直理解に苦しみました（私だけかｗ）
ここを「有効化」すると、通常５分間隔でデータが更新されるところが１分間隔となります。
私は、「無効」で学習します。(;'∀')
「ハンズオンの範囲」では、無効でも５分間隔でデータ収集してくれて、アラームも表示してくれますので全く問題ないかと。

ちなみに、参考書で学習した際はCPUやメモリ、ネットワークの動作が思わしくない場合は、EC2やELBなどをチェックすることで、異常を発見できる場合があるとのこと。φ(..)メモメモ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/51212082-14ad-aaa1-84a8-df07b98fd271.png)
次！！

ここでユーザーデータに、ストレスチェックツール、Apacheのインストール、SSHの設定などを行っていきます。ハンズオンサイトのコピー↓
```
#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo amazon-linux-extras install epel -y
sudo yum install stress -y
sudo systemctl start httpd
sudo echo `hostname` > /var/www/html/index.html
sudo echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config
sudo echo "ClientAliveCountMax 120" >> /etc/ssh/sshd_config
sudo systemctl restart sshd.service
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/a9baafa1-98d2-1eee-12d9-d8a49abeaa34.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/3a3a7f7d-cbf3-6768-ce49-fda23a11b6a6.png)

ひとまずできとる。次のAuto Scalingグループ作成の工程で反映させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/69e2f19a-8810-0d31-4a03-3beddc3f79dd.png)




## Auto Scalingグループを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/775970e4-36fa-f309-0b62-dec98a7da0ff.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/67cadfc3-448e-ad93-f427-343f12c716c5.png)
ここで作成したEC2の起動テンプレートを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/f0b69965-7a71-8b68-bc77-6d75a4b0fc3d.png)
CloudFormationで事前に入れたVPCと２つのAZを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d2983516-e7c3-f66c-0ed6-3dbb8b16412d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/8b21a8a4-6ff3-30dd-8f41-1c0d4621bf98.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/70a3ba1a-f747-c62a-4b04-c13aea4f789f.png)

ここにヘルスチェックがあります。
死活監視の発展バージョンですね！
異常が発生したらEC2を置き換えてくれるもの|дﾟ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/daa59b64-6bae-5a59-17be-909812b2d9da.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/94bcee9c-3516-cda6-7d14-5c8e94a029a3.png)

スケーリングは表記のとおりで行きます！
【こっちで進めます。】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/6066df3a-afed-6099-8f9d-bff62121a81a.png)
【参考】
「ターゲット追跡スケーリングポリシー」を選択した場合、CPUの使用率などによってスケーリングできるみたいですねー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/fe9be8dd-0c8a-02f1-01c3-dfb749dc5196.png)
【参考２】
EC2置き換え時のポリシーを決めるオプションがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d6f4d4bc-bf46-add2-70eb-c29bb502e84a.png)

Auto Scalingグループが完成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/20b38330-44d0-7862-2a27-0e95bf9d8ece.png)
EC2がカウントされました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/7d8305fd-462d-d12e-b039-7189b47834f6.png)





## Auto Scalingのスケジュール設定
指定した時刻にスケーリングされるか確認していく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4c72c987-bc67-9411-9925-d5f8e316ddb3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/030a7dd1-4a37-7091-59ad-2331fe7a67f3.png)

９時間前の時間を設定。
例：今が午前０時であれば、前日の午後３時ですね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/2b61e9a6-1687-4137-07a1-324e0c3a53a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/0fc99e12-8536-ac20-1506-c67b16cc37a3.png)
予定どおりスケーリングできていますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/28e35b74-ee60-e17a-85ec-67d6cb73c4d0.png)


## Auto Scalingの動的スケーリング設定
ターゲット追跡スケーリング
要するに、設定した閾値でCPUが足りなければEC2を加えて、十分であれば元に戻すということ。

※私の場合、スケジュールでのスケーリング実施後に、時間の関係で一度リソースを全て削除して、動的スケーリングの学習を改めて開始しています。インスタンス数が１つの状態から以下スタートしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/f9379853-b93a-001e-e2c9-310acaa3eaa3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4380a0cd-2556-84c5-3c0b-8526d424b9ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/39c1b4c7-c66f-c9cc-149f-40b1beedd5e9.png)




ターゲット追跡スケーリングを作成した時点で、「CloudWatchのアラーム」が作成されています。Σ(ﾟДﾟ；ｴｰｯ!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/052b26ad-0ad0-8145-77d8-70461c3547e9.png)

Highがスケールアウトの起点になる指標です。
また、条件に記載がありますが、３分以内に３回しきい値を超えた場合スケーリングされるということです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/c4b0cb0f-d53d-8378-d64f-e998b03cf864.png)
現状↓　べたなぎですねｗ赤線がしきい値になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4e1106b6-12f0-6cf9-6bca-179033ec9fd7.png)




## EC2へ負荷をかけ、スケールアウト
ここからSSH接続であるコマンドを実行することで、サーバーに負荷をかけていきます。まず準備から開始します。（私の場合、現状のインスタンスはEC2が１つのみです。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/3d4f8da4-2e86-7f35-3031-33ff3805cb0e.png)

EC2に接続していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/eda43ff7-3ede-df93-b295-6299863bfdba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/a544a2dd-26b9-5522-937d-4c79cedc48b8.png)
次のコマンドはEC2に負荷をかけるコマンドですので、ご使用には注意されてください。
```
stress -c 1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/dcac0d2d-24b7-fd8d-6fbc-8684808e7d94.png)
上がってきたー（緑枠）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/22ec275f-695b-34af-452e-c8b6cfd13bb0.png)
MAXだー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/37e79a5e-2bb0-917e-d148-c29faae7874e.png)
Auto Scalingのアクティビティを確認するとnew instanceができていますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/b8862db4-7a07-2642-5522-0a052e06eea6.png)
インスタンスが新たにできています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/39e2b8b2-0645-0211-10c8-874e9f9ffcd9.png)


## 負荷を停止し、スケールイン
まず、ストレスを停めます。
「Ctrl+C」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/0dd4bf45-d610-9efa-590a-a8db051e6c05.png)
すぐグリーンになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/645bf7c2-ac25-0fce-2ca4-580904c328b6.png)
参考として、次の画像はLowのしきい値を示しています。15分間CPU使用率49％未満を維持できればスケールインしてくれますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d7e47682-3dd8-d44a-1ee1-46c1278f052a.png)
スケールインしました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/7b09af06-30a8-3600-9d05-277f4723910f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/f00d659a-0081-c34b-3554-3d5290b4f783.png)

## EC2インスタンスのヘルスチェックを検証
私の場合次の画像のとおり、最低１つのEC2インスタンスが必要という設定
なけなしの１つのEC2インスタンスを停止することで、デフォルト設定のヘルスチェックが働き、新たなEC2インスタンスが起動するはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/d71c345e-de08-62d3-669f-abb9628e3083.png)

まず、なけなしのEC2インスタンス１つを停止させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/de435364-2573-bac9-444e-f31f3dd02e0a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/8f172fba-b70d-e0a0-2797-7acd8fd15189.png)

見事に置き換えが実行され、新たなEC2インスタンスが自動作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/e604a789-c467-6a67-c585-258fc5d20d03.png)

Auto Scalingのアクティビティから動きを確認していきます。
停止させて。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/285c9f2d-e564-d6a0-9289-643e7f903fa2.png)
作成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/048ee2f0-3ba2-1934-f284-310d8b701df9.png)
期待した動きをしています(。-`ω-)

## リソースの削除
ハンズオンが終了しましたので後片付けをして、次のハンズオンの準備っすね！
１　Auto Scaling Groupの削除（数分かかります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/230bfb4f-702e-99b6-ecd3-268d3a0cbaa4.png)
２　EC2起動テンプレートの削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/2940f9d9-9783-61d8-2ff1-e566ff056fc1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/16b51640-6d84-910f-facf-a1fe2a0535c8.png)
３　CloudFormationのスタックを削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4cd42666-3cb8-b418-134e-3b049a6de678.png)
４　ここで動画は終了するのですが一口メモですｗ
実は、S3バケットを削除し忘れています。
ハンズオンのなかで、CloudFormationへjsonファイルをアップロードしたデータが格納されています。つまりデータ量は少ないですが、自動的にS3バケットを作成し、アップロードしたデータを管理してくれていたのです。

はい。空にしてから削除します(^^;
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/4f2c2afe-c978-612a-ce9f-874ff03b6b5d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/25161d0a-2e21-a68f-b520-1a89f2a6500e.png)

これで削除完了です！次の学習準備完了！

では！