【AWS】CloudWatchとAutoScalingについてまとめてみた

## CloudWatchとは？
AWSを管理してくれるサービスです。
例えば、EC2のCPUやMemoryが９０％以上になってしまった場合ユーザーに通知を送ることができます。
また、その際にどのようなアクションをするかも設定ができます。

## AutoScaringとは？
EC2を増減してくれるサービスです。
もしアクセスが急増したときに、
現在のEC2ではたりなくなった分を追加してくれます。

### AutoScaringの起動テンプレートを作成
構成は以下の通りです。

| 構成                 |
| -------------------- |
| AMI                  |
| インスタンスタイプ   |
| Key Pair             |
| セキュリティグループ |

### Auto Scaring groupの作成
最小、希望、最大を指定していく。

| EC2  | 個数 |
| ---- | ---- |
| 最小 | 2    |
| 希望 | 2    |
| 最大 | 4    |

これをCloudWatchと結びつけて考えます。

| Cloud Watch                          | Auto Scaling group                            |
| ------------------------------------ | --------------------------------------------- |
| CloudWatch で CPU が 70%以上になった | スケーリングポリシーによって、EC2 を 1 台追加 |
| CloudWatch で CPU が 30%以下になった | スケーリングポリシーによって、EC2 を 1 台削除 |


## それでは実際に起動テンプレートを作成してみましょう。
■ルート
①コンソール内で「EC2」と検索
②左ペイン内の「テンプレートの起動」を選択
③「起動テンプレートを作成」を選択

![スクリーンショット 2021-05-03 10.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3d701edf-3999-5634-c97e-3afbf9359ad9.png)

## Auto ScaringとCloudWatchを導入してみよう！
### 導入図
![AWS_VPC – 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/6d0e56dd-144c-2421-5f81-105b5b2e282a.png)

### 1. AWSへログイン
### 2. 東京リージョンになっていることを確認
![スクリーンショット 2021-05-01 14.21.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/73a9450b-47d7-5c13-54a7-e5e882db1e49.png)

### 3. VPCを作成（IP：10.0.0.0/21）
■ルート
コンソールで「VPC」と検索→左ペイン内の「VPC」を選択→「VPCを作成」を選択

![スクリーンショット 2021-05-01 14.24.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/2cda6785-513b-61a1-de80-15562d8439e6.png)

### 4. サブネットを作成（IP:10.0.0.0/24, 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24）
■ルート
コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「サブネットを作成」を選択

#### Public Subnetを作成
WordPressに使うサブネットを作成します。

![スクリーンショット 2021-05-01 14.27.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/a9a204ca-5384-1b74-f1ce-e38b6d0522d2.png)

#### Private Subnetを作成
RDB(MySQL)に使うサブネットを作成します。

![スクリーンショット 2021-05-01 14.29.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/be11f4be-8af3-5c26-ffcb-58112991fc7e.png)

### 5. Publicサブネット内にEC２を構築
■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスを起動」を選択

■ステップの流れ
STEP１　Amazon Linux 2 AMI
STEP2　t2.micro
STEP3　「ネットワーク」、「サブネット」、「パブリックIP」を変更
![スクリーンショット 2021-05-01 14.35.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/29a3ea9a-b714-3402-a994-52547b575b9f.png)
STEP4　そのままでOK
STEP5　Name＝WEBSERVER1で設定
STEP6　セキュリティグループを変更
![スクリーンショット 2021-05-01 14.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/d023ba9f-f697-9ae5-4f06-389d7bb0a3e9.png)
STEP7　キーペアの作成
![スクリーンショット 2021-05-01 14.38.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/e9eed1f2-8a0a-9565-8b68-361c77a03636.png)

#### AMIの作成
作成した**WEBSERVER１**を停止してAMIを作成します。
■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスの状態」から停止を選択
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「アクション」から「イメージを作成」を選択

![スクリーンショット 2021-05-02 21.35.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/465d57aa-3800-7bd0-5166-9cfc742a6c30.png)

では作成したAMIを使ってインスタンスを作成しましょう。
ステップ５のタグは、**Name＝WEBSERVER2**とします。
![スクリーンショット 2021-05-02 21.40.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/fd7614fd-a09d-d091-8593-ed38314b6269.png)
![スクリーンショット 2021-05-02 21.42.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/8c483ec6-1284-fb80-7e10-147b333d8d82.png)

### 6. Publicサブネットをインターネットに接続するためにInternet Gatewayを作成
■ルート
コンソールで「VPC」と検索→左ペイン内の「インターネットゲートウェイ」を選択→「インターネットゲートウェイの作成」を選択

![スクリーンショット 2021-05-01 14.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/074ac6fa-fd66-59c4-a9ee-0b75097d966f.png)

これではVPCとアタッチできていないので、インターネットへ接続できません。
なのでアタッチさせましょう！
![スクリーンショット 2021-05-01 14.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/1bc732ed-4d5e-8624-4c6c-633fdf04010e.png)
これでアタッチしました。

### 7. EC2がインターネット接続するためにルートテーブルを作成
■ルート
コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「Public-Subnet1」を選択→「ルートテーブル」を選択→「ルート」へ移動→「ルートを編集」を選択

![スクリーンショット 2021-05-01 14.49.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/1943619f-47f3-3ab3-5866-f6a069afefb2.png)

### 8. ロードバランサーを導入
■ルート
コンソールで「EC2」と検索→左ペイン内の「ロードバランサー」を選択→「ロードバランサーの作成」を選択

![スクリーンショット 2021-05-02 21.52.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/ca08224c-90eb-b071-78e9-94111f0644ed.png)
![スクリーンショット 2021-05-02 21.53.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/fd86b60f-ab9d-35b9-dac3-99306552c1eb.png)
![スクリーンショット 2021-05-02 21.54.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/8f06a976-e488-0a7e-91c1-c07e64777730.png)
![スクリーンショット 2021-05-02 21.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/60b42622-b24b-ed3d-44f7-a8c342a7205d.png)

### 9. PrivateサブネットにRDSを構築
RDSには、**エンドポイント通信**という機能がありました。
もし通信障害などが発生して、親のRDSが使えなくなった時子のRDSに接続してくれる機能です。
つまり、このことから**異なるAZにサブネットがないとRDSは使えません**。

ということで複数のサブネットにまたがる形でRDSは構築されるので、
**サブネットグループ**というものが必要になります。

■ルート
コンソールで「RDS」と検索→左ペイン内の「サブネットグループ」を選択→「DB サブネットグループを作成」を選択

![スクリーンショット 2021-05-01 15.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/66a4ad75-be0e-13c7-945e-b623b74d7bf6.png)

それでは次に、DBを作成していきましょう。
■ルート
コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「データベースの作成」を選択

![スクリーンショット 2021-05-01 15.10.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/8d20faa0-e801-423d-de9f-09398b4d1e52.png)
![スクリーンショット 2021-05-01 15.10.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/c8b29bfb-0625-442b-586a-e1088ca689da.png)
![スクリーンショット 2021-05-01 15.11.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/1e9937ea-0fa3-9e8d-f468-1f9d6a24834e.png)
![スクリーンショット 2021-05-01 15.11.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/c6fc8cd0-2efb-5c26-f551-6d0e5d937447.png)
![スクリーンショット 2021-05-01 15.11.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/728b9689-044e-d3f4-dc55-98a5f4cc6f1f.png)

次にRDSで作ったセキュリティグループを修正します。
■ルート
コンソールで「VPC」と検索→左ペイン内の「セキュリティグループ」を選択→「RDS-SG-1」を選択

DBは重要な情報が入っているため誰でも彼でもアクセスできると困ります。
なので、PublicサブネットのEC2（セキュリティグループ→WEB-SG-1）からしか触れないように修正します。

![スクリーンショット 2021-05-01 15.23.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/d4da3ac7-1bb8-ac88-ec13-52d77a60728a.png)

### 10. SSH接続でログイン
```terminal:ターミナル
// ①キーペアがあるところへ移動
$ cd desktop

// ②キーペア発見
$ ls -l keypair.pem
-rw-r--r--@ 1 ryo  staff  1704  5  1 14:38 keypair.pem

// ③権限を４００に変更
$ chmod 400 keypair.pem

// ④SSH接続
$ ssh -i keypair.pem ec2-user@(パブリックIPアドレス)

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|
```

### 11. EC2にWordPressを導入
```terminal:ターミナル
// 権限が足りないので権限をrootに移動
$ sudo su -

// EC2のパッケージを最新の状態にアップデート
$ yum -y update

// WordPressが動くために必要なツールをダウンロード（PHP, Apache, MySQL）
$ amazon-linux-extras install php7.2 -y
$ yum -y install mysql httpd php-mbstring php-xml gd php-gd

// Apacheが再起動後も自動的に動くようにする
$ systemctl enable httpd.service

// Apacheをスタート状態に
$ systemctl start httpd.service

// カレントディレクトリにWordPressの最新パッケージを入れる
$ wget http://ja.wordpress.org/latest-ja.tar.gz ~/

// あるか確認する
$ ls -l
total 16076
-rw-r--r-- 1 root root 16458939 Apr 21 00:00 latest-ja.tar.gz（あった）

// 拡張子がgzなので展開しましょう
$ tar zxvf ~/latest-ja.tar.gz

// ディレクトリごと/var/www/htmlへコピーする
$ cp -r ~/wordpress/* /var/www/html/

// /var/www/htmlをapacheのユーザーに権限変更
$ chown apache:apache -R /var/www/html
```

### 12. RDSのサイトアドレスをロードバランサーのDNSに書き換え
```terminal:ターミナル
// ①RDSへログイン
$ mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u wordpress -p

// ②WordPressのテーブルを使用
MySQL [(none)]> USE wordpress

// ③指定のカラム
MySQL [(none)]> SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
+-----------+-------------+-----------------------+----------+
| option_id | option_name | option_value          | autoload |
+-----------+-------------+-----------------------+----------+
|         2 | home        | http://13.231.153.132 | yes      |
|         1 | siteurl     | http://13.231.153.132 | yes      |
+-----------+-------------+-----------------------+----------+

// ④ロードバランサーのDNS名に置き換える
MySQL [(none)]> UPDATE wp_options SET option_value = 'http://xx.xx.xx.xx' WHERE option_name IN ('siteurl', 'home');
```

### 13. EC２のセキュリティグループのアクセス許可をロードバランサーからに変更する
■ルート
コンソールで「EC2」と検索→左ペイン内の「セキュリティグループ」を選択→「WEB-SG-1」を選択

![スクリーンショット 2021-05-02 22.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/1a3213e8-953c-1194-4842-fb61350c2374.png)

### 14. RDSも冗長化構成へ変更
■ルート
コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「database-1」を選択
![スクリーンショット 2021-05-02 22.10.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/06f457fa-b376-5303-44a1-beb4beb1117c.png)

### 15. 起動テンプレートの作成
■ルート
コンソールで「EC2」と検索→左ペイン内の「テンプレートの起動」を選択→「起動テンプレートを作成」を選択

![スクリーンショット 2021-05-04 10.50.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/c46ce17d-fde4-7fbb-aaa9-5e463c74d0f0.png)
![スクリーンショット 2021-05-04 10.50.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/5ac037dd-336d-17e5-13d9-6b2ec0b3f214.png)
![スクリーンショット 2021-05-04 10.50.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/e88f08e4-954a-35a9-5b3c-deb10c56dedf.png)
![スクリーンショット 2021-05-04 10.51.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/dd1288ac-6d06-43d7-2436-c742890adca2.png)

### 16. Auto Scaring Groupの作成
■ルート
コンソールで「EC2」と検索→左ペイン内の「Auto Scaling グループ」を選択→「Auto Scaling グループの作成」を選択

![スクリーンショット 2021-05-04 11.00.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/f5b52f28-fa34-4f94-77b3-d098302f31a1.png)
![スクリーンショット 2021-05-04 11.01.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/11d824ac-98e8-b8c8-77e0-718fdd882aa5.png)
![スクリーンショット 2021-05-04 11.02.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/5e23a7bb-5758-92f4-04d5-a7765829ab31.png)
![スクリーンショット 2021-05-04 11.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/83755b26-c622-c9d2-33e3-f68a1ce717ef.png)

### 17. CloudWatchの作成
■ルート
コンソールで「CloudWatch」と検索→左ペイン内の「アラーム」を選択→「アラームの作成」を選択

![スクリーンショット 2021-05-04 11.08.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b6fea51a-2821-7c59-9f21-65b649af910d.png)
![スクリーンショット 2021-05-04 11.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/74036fd0-9a1c-0f3d-1027-341ad3046f6d.png)
![スクリーンショット 2021-05-04 11.12.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3933aa55-8b6a-2194-a601-0a1345415fa2.png)

### 18. Auto Scaringの自動スケーリングの設定
ここでCloudWatchの条件に当てはまった時のアクションを設定します。
■ルート
コンソールで「EC2」と検索→左ペイン内の「Auto Scaling グループ」を選択→「Auto Scaling」を選択

![スクリーンショット 2021-05-04 11.15.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/26399b12-fe5a-da8e-8b39-1374ca856ce5.png)

![スクリーンショット 2021-05-04 11.16.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/dd33c5fd-0c14-d32d-7236-653886d8db18.png)

これで完了です。

## 削除手順
・Auto Scaring
・CloudWatch
・RDS
・EC2
・ELB
・VPC