【AWS】【AutoScaling】EC2上にWordpress作成　～スケーラビリティ～

## はじめに
前回のハンズオンで構築した内容にスケーラビリティを追加したハンズオンの内容になっております。
はじめに、AutoScalingを使用し、最後にはCloudWatch Alarmとの連携までを行い、必要に応じて、自動でスケールイン・アウトが可能なシステム構築を行える内容となっておりますので、最後までお付き合いください。

## 構築図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/1b5e5766-9755-99d4-25c5-d3f8b85c6c30.png)


## 追加したリソース
・AutoScaling

・CloudWatch Alarm


## 構築手順
1. 起動テンプレート作成

2. AutoScalingの作成

3. CloudWatch Alarmの作成

4. AutoSaclingのスケーリングポリシー作成

5. EC2インスタンスへの負荷テスト

6. 負荷テスト解除

## 構築
### 1. 起動テンプレート作成
➀「起動テンプレート名」：任意の名前を入力

➁「自分のAMI」を選択し、「自己所有」を選択

➂「AMI」：以前作成した、自身のAMIを選択

➃「キーペア名」：自身で作成したキーペア名を選択

➄「サブネット」：EC2を作成したいサブネットを選択

➅「SG」：「既存のSGを選択する」を選択し、「共通のSG」へEC2にアタッチしているSG名を指定する。

➆「高度なネットワーク設定」内の「パブリックIPの自動割り当て」を有効化とする。

➇「起動テンプレートを作成」押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/d0da7984-0da0-49cc-86fc-2ac2e76c73c0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/f9499e0a-a94e-adb3-a2f9-7806ee777239.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/c39268b3-09e2-258c-348e-de96712e6a8c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/8e5bd904-4b34-0039-2047-302ee8439ccd.png)

起動テンプレート作成完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/8f1fe24a-c188-2d80-5137-83605065fc80.png)

### 2. AutoScalingの作成
➀「Auto Scaling」を押下

➁「Auto Scalingグループを作成する」押下

➂「Auto Scalingグループ名」：任意の名前を入力

➃「起動テンプレート」：上記で作成した自身の起動テンプレートを指定

➄「バージョン」：latestを指定し、「次へ」押下

➅「VPC」：自身の作成したVPCを選択

➆「AZとサブネット」：自身の作成したAZとサブネットを選択し、「次へ」押下

➇「既存のロードバランサーにアタッチする」選択

➈「ロードバランサーのターゲットグループから選択する」選択

➉「既存のロードバランサーターゲットグループ」：自身で作成したものを指定

⑪「追加のヘルスチェックタイプ」：ELBにチェックを入れ、「次へ」押下

⑫希望するキャパシティ：2

⑬最小の希望する容量：2、最大の希望する容量：4

⑭「Auto Scalingグループを作成する」押下

⑮Auto Scalingのアクティビティ画面にて、EC2が2台起動しているログを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/6b1177c8-c0ef-cf55-45e5-0fe75df9e23e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/5f84d428-dae4-c599-d36d-7466c74b1220.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/4071f9f5-4bb7-35b0-8771-df248e88f450.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/d3447a68-63e2-2fc4-4803-717d04d3f485.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/84f440cd-6ef8-6c9f-8e72-f3ece54e72f6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/f5cce2cd-9cdb-7503-1dc9-739d897bd4f9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/f3997dea-6119-2d81-1fd3-9a5848e6eb5d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/a02c5af9-00ed-7be1-e143-3505e7f5999b.png)

### 3. CloudWatch Alarmの作成
#### 3-1 アラーム×２の作成（CPU使用率70%よりも高い、CPU使用率30%よりも低い）
➀CloudWatch画面の「アラームの作成」押下後、「メトリクスの選択」押下

➁「EC2＞Auto Scalingグループ別」を押下

➂自身の作成したAutoScalingグループの「CPU Utilization」を選択し、「メトリクスの選択」押下

➃「期間」：1分

➄「より大きい」選択

➅「70」入力し、「次へ」押下

➆「次のSNSトピックを選択」にて、「既存のSNSトピックを選択」を選択

➇自身で作成したSNSトピック指定
※事前に作成していない場合は、「新しいトピックを作成」から新規で作成を実施する。

➈「アラームの作成」押下

➉アラームが作成されているのを確認
※CPU使用率30%よりも低いアラームの作成は、上記と同様の手順で⑥のみ「30」を入力して実施してください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/e3bcfae1-5d16-caa1-fe29-58c71101ddb1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/3a0da936-5c3a-83ef-cbd0-744eaac0e41b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/2da6e1f5-fafc-988d-1132-0ee1d2e7f98e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/70f4854b-4970-00e9-6545-9568de3e6e8b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/fbb9e020-b994-2e46-28fc-e18b9e4d4b27.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/abf32886-c625-4d18-b27a-1fb3f7785daf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/cdb1c5e4-7f42-b875-5f27-b8ce175e6c85.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/3d31889e-9d18-c7ca-0971-067b3a076ca6.png)


#### 4. AutoSaclingのスケーリングポリシー作成
➀Auto Scalingグループ画面にて、「オートスケーリング」押下

➁「動的スケーリングポリシーを作成する」押下

➂「ポリシータイプ」：「シンプルスケーリング」選択

➃「スケーリングポリシー名」：任意の名前を入力

➄「CloudWatch Alarm」：3-1で作成したCloudWatch Alarmを選択

⑥「アクションを実行する」：「追加」、「１」、「容量ユニット」「30」を指定し、「作成」押下

➆「アクションを実行する」：「削除」、その他は１つ目の作成手順⑥と同様
※2つ目のスケーリングポリシー作成の操作手順


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/3a856128-2b91-3f4f-7564-f8762cd270c6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/10d7a110-c855-e05a-d630-ec82814de382.png)

２つ目のスケーリングポリシー作成の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/7056926f-10cb-2104-1b7c-a06fe8456deb.png)

#### 5. EC2インスタンス×2への負荷テスト
前提：EC2へ接続しているものとする。

➀バックグラウンドで、CPUに負荷をかけるためのコマンド×4回を実行

```
yes >> /dev/null & 
```

➁CPU使用率を確認
```
top
```

こんな感じになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/61417c18-da15-649a-a9b1-2ebcdace6917.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/405bec62-fd2b-beb4-3077-179d2c751997.png)

➂Auto Scalingグループ画面にて、アクティビティの確認

➃EC2画面にて、追加でEC2インスタンスが起動しているのを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/6904ed00-305a-87c1-16bb-f3d03614f4cd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/1cf23524-f0f3-0e9d-f2a3-2cc2aec78aa6.png)


#### 6. 負荷テスト解除
➀バックグラウンドで実行しているプロセスの停止

```
kill {5507..5510}
```
➁CPU使用率の確認

```
top
```

➂Auto Scalingグループ画面にて、EC2が削除されているログの確認

➃EC2画面にて、EC2インスタンスが削除されているのを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/4f2d2188-9e29-5056-9f34-634dc9c8da46.png)

wordpressの画面は、変わらず動いていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/4f6c098f-d050-b4c4-2338-48fc6ce63b2a.png)

## さいごに
今回も長い作業になり、最後までやり遂げた皆さん、大変お疲れ様でした！
今回のハンズオンを通して、システム上にサーバを構築するには、こういった負荷に耐えられる設計を心がける必要があることを改めて実感しました。

皆さんの参考にしていただけると嬉しいです。