AWS勉強会(3) / Auto Scalingチュートリアル

社内の初心者向けAWS勉強会で実施している最初のテーマ「LAMP環境を構築しよう」において、動作しているEC2に対して、死んでも甦るようにしたり、簡単な設定で同じ内容のEC2を複数起動させたりする設定についての手順。

というよりは機能のメモ。
（以下、設定したゴールに対する構築手順になっていないので、Auto Scaling + ELBの構成で別途まとめるつもり → [AWS勉強会(4) / ELB + AutoScalingグループでwebサーバ](https://qiita.com/zaki-lknr/items/ce16d3f125b1a4b8b783)）

設定するものは以下の2項目

|項目|概要|
|---|---|
|起動設定|Auto Scalingで起動するEC2自体の設定(AMIやインスタンスタイプ、ユーザーデータなど)を定義|
|Auto Scalingグループ|起動設定に対して、どのネットワーク(VPCやサブネット)で起動させるのか、起動するインスタンス数、ヘルスチェックの方式やELB連携などを定義|

簡単に説明するとこんな感じ。
「起動設定」で定義した内容のEC2が「Auto Scalingグループ」で設定したルール(VPCやサブネット/AZ、インスタンス数など)に従って起動したり削除される、というもの。
(現在、起動設定にかわる「起動テンプレート」が利用できるようになっている。ただし、ここではまだ扱わない)

# 起動設定

まず、Auto Scalingグループで管理するEC2自体の設定を行う。(Auto Scalingグループのメニューからも作成できる)

基本的にはEC2の作成と同じ流れ。

## AMIの選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/0d6f2015-5727-fa99-95df-df2494152b50.png)

Amazon提供のAMIだけでなく、自分で作成したスナップショットをベースにすることもできる

## 詳細設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/1131d444-9cef-22dd-3c47-fbf9907b09cb.png)

名称は「どんな内容のEC2か」を基準につければOK

## 高度な詳細

ユーザーデータの入力はここ。
下記は例として、起動時にhttpdをインストールしておくために設定。
詳細は[AWS勉強会(補足1) / ユーザーデータでEC2作成時の初期設定を行う](https://qiita.com/zaki-lknr/items/197ea366bd4243b78e69)を参照。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c8b1b23c-f744-5cbf-311f-86164e0e0519.png)

もう一つ重要なのが、IPアドレスの設定。
デフォルトのVPC以外のネットワーク設定の場合(例えば勉強会用に改めて作成したVPC、など)、デフォルト設定だとパブリックIPアドレスが割り当てられない。
グローバルIPが必要な場合は、明示的に「パブリックIPアドレスを各インスタンスに割り当てます」を選択する。
(※ どのVPCを使うかの設定は、ここで作成している起動設定でなく、後述のAuto Scalingグループの設定で行う)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/ab5b9840-0761-3887-b7e6-9f5864e65079.png)

あとはストレージとセキュリティグループの設定を行う。
EC2の作成と異なり、VPCやサブネットの設定はここでは行わないため、作成済みのすべてのセキュリティグループが選択肢に出てくるので、Auto Scalingグループで指定するVPCと異なるセキュリティグループを選ばないように注意。

# Auto Scalingグループ

## Auto Scalingグループの作成

「Auto Scalingグループの作成」押下すると、簡単な説明が表示されるので「今すぐ始める」押下

Auto Scalingグループの作成を始める。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/1e1e455a-0636-6dee-6b25-653d271d13f8.png)

## 起動設定の選択

作成した起動設定を選択する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/34dbb2db-d458-6856-e969-cf164c3f10d6.png)

## 詳細設定

Auto Scaling対象のEC2を、どのネットワークで起動するか等を設定する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c6652df9-bc2c-969b-e5e0-9609ba312581.png)

サブネットは複数選択することができる。
複数のサブネットを選択しておくことで、複数のAZにEC2を起動させることができ、可用性を高める構成にすることができる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/d7a77121-d762-bd6a-af62-ee0d0a9b926e.png)

ちなみにここは不親切なことに、サブネットの`Name`タグが表示されなくて、どれがどのサブネットかわかりづらいので注意(アドレスとAZで判断するしかない？)

## 高度な詳細

ここでは作成済みのELBがあればロードバランサと連携させる設定もできる。
(今回は簡単に紹介するだけ。そのうち「Auto Scaling + ELB設定」の構成をやる)

### ロードバランシングの設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/12c414e6-b270-c877-7f1d-30c500f0723a.png)

作成済みのELBを選択できる

### ヘルスチェックのタイプ

|チェックのタイプ|動作|
|---|---|
|EC2(デフォルト)|EC2自体のステータスチェックの結果で死活判定(要はVMが生きているか)|
|ELB|上記のEC2チェック＋ELBのヘルスチェックで死活判定(上記＋HTTPのELBであればHTTP的にも死活判定)|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/37f0d634-35d7-9fae-203a-9997f6871814.png)

## スケーリングポリシーの設定

ここではEC2の負荷状態などで自動でスケーリング(インスタンス数を増減して負荷を分散させる)させるための設定ができる。
設定しない場合は「初期サイズを維持」ですすめる(サイズを手動で変更することはできる)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/96296bcc-1112-d48e-1c30-6404cc4f6a67.png)

あと、通知の設定も可能(試してない)

## タグの設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/db02ecce-66c1-4762-9ded-a7db6bd8b870.png)

`Name`タグを設定しておくと、Auto Scalingグループによって起動したEC2にタグが設定される

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/b2b938d2-9e5e-b410-9082-ad02d089d512.png)

起動数を2以上にした場合も、すべて同じタグが設定される
(OpenShiftみたいにランダムなsuffixが付加されて一意な名前になるわけではない模様)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/51e35a90-b6d9-d2e5-73c1-46a1e1bd3bef.png)


## 起動

これくらいで作成を実行すると、(デフォルトのままであれば)開始時1インスタンス設定にしたがって、一つのインスタンスが作成される

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/ed70cba9-ca62-dc74-b3b7-96c02bdebf6f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c25f7fe2-2707-02d4-e35c-0970e82b47d7.png)


なんか初回失敗してるみたいだ。。(迷宮入り)
でも一応起動した。

インスタンスの一覧でも確認できる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c889a9e4-82b6-2fe8-d4ac-7b971f553592.png)

起動したプライベートサブネットのEC2にアクセスし、httpdがインストール済みの状態か確認

```
zaki@wensley% ssh -o ProxyCommand='ssh -i ~/.ssh/aws-practice.pem ec2-user@*.*.*.* -W 172.26.20.82:22' -i ~/.ssh/aws-practice.pem ec2-user@172.26.20.82 
The authenticity of host '172.26.20.82 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:dppD5TFrKgMxH18/xgBjzYFqGjCIa4AjUO3aAy1sJCU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.26.20.82' (ECDSA) to the list of known hosts.

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

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
2 package(s) needed for security, out of 3 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-26-20-82 ~]$ 
[ec2-user@ip-172-26-20-82 ~]$ 
[ec2-user@ip-172-26-20-82 ~]$ 
[ec2-user@ip-172-26-20-82 ~]$ sudo su -
[root@ip-172-26-20-82 ~]# sudo /etc/init.d/httpd status
httpd is stopped
[root@ip-172-26-20-82 ~]# 
```

※ ユーザーデータにhttpdのインストールのみ記述していたので、webサーバのプロセスは起動はしていない
そのあたりの設定は[AWS勉強会(補足1) / ユーザーデータでEC2作成時の初期設定を行う](https://qiita.com/zaki-lknr/items/197ea366bd4243b78e69)を参照。

で、このEC2は今(複数設定したAZのうちの一つである)`ap-northeast-1a`でのみ1台起動している。

# スケール数の変更

Auto Scalingグループの一覧の[操作]->[編集]から。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/10b6a797-dda1-145d-049f-a2381a168812.png)

画面下部の詳細部分が編集状態になる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/ccf95825-db51-e4c1-b557-9e1bfecc6b08.png)

希望するキャパシティを2に変更してみる(その際、最大の値も調整が必要)
[保存]を押下(右上にある)

するとアクティビティ履歴に2つ目のインスタンス起動

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c2afc94c-75dc-8202-8af3-346b76d24c84.png)

インスタンスを確認すると、(複数設定したAZのうちの)もう片側のAZで起動していることが確認できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/1596a355-af10-84f4-5e3d-f7cc04189cf0.png)

状態としてはこんな感じ。

![AutoScaling.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c3c67acb-a7b0-e2a8-68f0-b7582cf6f760.png)


この状態から

- キャパシティを減らす設定を行う
    - 起動しているEC2が1台削除される
- Auto Scalingグループの設定でなく、インスタンス一覧のメニューから、1台削除操作を行う
    - キャパシティ1設定の状態での削除処理のため、稼働しているEC2が0であることが検知されると1台新たに起動する
- キャパシティ数を0にすると
    - 全部消える

キャパシティ数を0にすると稼働しているEC2は全て消えるが、起動設定は残っているため、再度キャパシティ数を1にすれば、同じ設定でEC2が起動する。

----

参考

[AWS再入門2018 Amazon EC2 Auto Scaling編 ｜ Developers.IO](https://dev.classmethod.jp/cloud/aws/2018-aws-re-entering-autoscaling/)