AutoScaling の導入 - Nextcloud 環境の構築を通じて AWS での環境構築を体験する⑦ [終]

「Nextcloud 環境の構築を通じて AWS での環境構築を体験する」 の第 7 回 兼 最終回となります。
これまでの記事は下記からどうぞ。

* 【第 1 回】[EC2 と RDS を利用した Nextcloud 環境の構築](https://qiita.com/S_Katz/items/756ca04ecece844ce503)
* 【第 2 回】[ElastiCache サービスの導入](https://qiita.com/S_Katz/items/280642e437c709052781)
* 【第 3 回】[EFS ファイルサーバーへの移行](https://qiita.com/S_Katz/items/5b5f37db29c3f800e610)
* 【第 4 回】[ALB を利用したサーバー負荷分散、可用性向上に向けた取り組み](https://qiita.com/S_Katz/items/edadf33755c0d834eb46)
* 【第 5 回】[分散した EC2 インスタンスのログの集約](https://qiita.com/S_Katz/items/2fa740c5051859963dae)
* 【第 6 回】[Cron の外部実行とメール送信の追加](https://qiita.com/S_Katz/items/35525eba5ff61801e7e3)

# はじめに
[前回記事](https://qiita.com/S_Katz/items/35525eba5ff61801e7e3) までで、可用性も考慮した Nextcloud の構成がひととおり完了しました。
最終回は、 AutoScaling を追加して、何らかのトラブルで EC2 が死んだりアクセスできなくなっても勝手に新たな EC2 が起動されるようにします。AutoScaling っていかにもクラウドっぽいサービスで私が好きなサービスの一つです。

# 今回構築する Nextcloud on AWS 環境
次のような構成となります。基本的な構成は前回から変わりません。 EC2 の起動を AutoScaling で制御していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/5dab65e8-962c-a011-39b0-ce7cc648bfeb.png)

## 今回追加で利用する AWS サービス
|サービス名|役割|
|:--|:--|
|AutoScaling|EC2 の稼働台数維持や、必要に応じて EC2 の自動スケールアウト/スケールインを行うことができるサービス。サービス自体は無料。今回は、稼働台数維持を目的として利用します。|

# 設定手順

## Nextcloud サーバーのマシンイメージ取得

Nextcloud サーバーの EC2 を停止し、現時点でののマシンイメージを取得します。

1. AWS マネジメントコンソールにログインし、EC2 サービスを選択します。「インスタンス」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/23c6b669-8027-5011-48d4-66d18389fbd0.png)

2. Nextcloud サーバーの EC2 インスタンスを選択し、「アクション」－「インスタンスの状態」－「停止」の順にクリックします。
※起動している Nextcloud サーバーの EC2 インスタンスすべてに対して同じように実施します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/f2061733-de14-1fdc-bd03-fa6500cbda6a.png)

3. Nextcloud サーバーの EC2 インスタンスを 1 つ選択し、「アクション」－「イメージ」－「イメージの作成」の順にクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/789fdc94-55fe-b8a3-8bf9-c684aeb2db71.png)

4. 「イメージ名」に適当なマシンイメージの名前を入力し、「イメージの作成」をクリックします。
\# どうでもいいところですが、画面イメージでは "Snapshot-・・・" としていますが、スナップショットとはちょっと違いますね・・・
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/4e73ab26-a0ae-a25b-e641-a016f192438b.png)

5. マシンイメージの作成が開始されます。「保留中のイメージ ami-*** の表示」のリンクをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/af557e6b-0bed-0031-f5b4-0ab297c9096d.png)

6. 「ステータス」が「available」になったら作成完了です。引き続き、「AUTO SCALING」の「起動設定」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/5b7af5d6-9fb4-6598-3325-935509e6bdd6.png)

## AutoScaling の起動設定

まず AutoScaling でどのような EC2 インスタンスを作成するのかを定義していきます。EC2 インスタンスの作成イメージによく似てるのでわかりやすいと思います。

1. 「起動設定の作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/77ef731c-4cc3-67b5-d1e9-06c1a5eb9f4b.png)

2. 先ほど作成したマシンイメージを探し「選択」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/6bafdd4a-0744-75d9-400d-588534703dae.png)

3. AutoScaling で起動する際のインスタンスタイプを選択します。これまでは "t3.small" を利用していましたが、ここでは "t3.small" よりも時間単価が安い "t3a.small" を選択し、「次の手順: 詳細設定」をクリックします。
※ "t3.small" と "t3a.small" の違いは、CPU の種別となります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/f93a0139-405b-dcdd-fc06-5dce4b69e839.png)

4. 起動設定の名前を適当に入力して「次の手順: ストレージの追加」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/4a2b3455-929d-7608-a3c3-f46757394991.png)

5. ストレージの設定です。そのまま「次の手順:　セキュリティグループの設定」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/05969131-8974-219e-b188-8ee941d76658.png)

6. セキュリティグループの設定です。「既存のセキュリティグループを選択する」をクリックし、これまで EC2 インスタンスに設定していたセキュリティグループを選択して、「確認」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/544a32ca-6d3e-285b-6ca7-d625c4e8bf39.png)

7. これまでの設定内容を確認し、「起動設定の作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/16d68446-26df-ef72-55b1-a4a4686ead74.png)

8. EC2 のキーペアは、これまで EC2 インスタンスに設定したキーペアを選択して「起動設定の作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/00ed32e9-1c7f-28dd-05ec-f8d358f335ec.png)

9. AutoScaling の起動設定の作成が完了しました。引き続き「この起動設定を使用して Auto Scaling グループを作成する」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/7559d565-2582-2dac-887f-73b280318f7f.png)

## AutoScaling グループの作成

AutoScaling グループは、自動的にスケーリングしたり管理の目的で論理グループとして扱われる EC2 インスタンスの集合です。先ほど作成した起動設定の EC2 のインスタンスを「どこに」「いくつ」作成するかなどを定義します。

1. まずは下記のように設定します。

    |項目|設定内容|
    |:--|:--|
    |グループ名|AutoScaling グループ名を適当に入力。|
    |グループサイズ|開始時にいくつの EC2 インスタンスを起動するか。ここでは 2 を入力。|
    |ネットワーク|これまで構築を行っている VPC を選択。|
    |サブネット|選択した VPC のパブリックサブネットをすべて選択。|
    さらに「高度な詳細」をクリックすると追加の設定メニューが表示されますので、以下のとおり設定します。

    |項目|設定内容|
    |:--|:--|
    |ロードバランシング|「ひとつまたは複数のロードバランサーからトラフィックを受信する」をチェック。|
    |ターゲットグループ|ロードバランサ (ALB) 設定時に定義したターゲットグループを選択。|
    |ヘルスチェックのタイプ|「 ELB 」を選択。|
    |サブネット|選択した VPC のパブリックサブネットをすべて選択。|
    設定したら「次の手順: スケーリングポリシーの設定」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/a6ff468c-a126-f128-48bf-4136c9d31ed8.png)

2. 今回は、当初起動した EC2 の起動数をそのまま維持する形とするので「このグループを初期のサイズに維持する」を選択し、「次の手順: 通知の設定」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/09aedda5-d467-21b8-c1a9-10f7a4936fc9.png)

3. AutoScaling でインスタンスが起動した等のイベントが発生した場合の通知設定です。ここでは特に何も設定しないので「次の手順: タグの設定」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/1ca44c31-4a15-5e66-2053-4b6274f4bd11.png)

4. AutoScaling グループへのタグ設定です。必要に応じてタグを追加して「確認」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/05ab000e-927b-1946-ffc6-7eae38de08ea.png)

5. これまでの設定を確認し、「Auto Scaling グループの作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/bf8e2b97-4277-811e-e4c6-2a63d0a8e22c.png)

6. AutoScaling グループの作成が完了しました。引き続きこの設定に基づいて EC2 インスタンスが起動してきます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/3ea2b549-b4d8-c499-eeee-c9fe3569e156.png)

7.　しばらくして EC2 インスタンスの一覧画面を確認すると下の画面のように EC2 インスタンスが 2 つ起動されることが確認できます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/d2ec1bef-fca9-b00a-4f3a-397538c3e4d4.png)

## これまでの EC2 インスタンスをロードバランサから外す

1. 引き続き左ペインの「ターゲットグループ」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/e9b3fda3-c731-68ba-e023-bd9b313bc1b2.png)

4. 先ほど選択したターゲットグループを選択し「ターゲット」タブをクリックすると「登録済みターゲット」にこれまで作成していた EC2 インスタンスと、AutoScaling で新たに作成された EC2 インスタンスの計 4 インスタンスが登録されています。これまで作成していた EC2 インスタンスは不要となりますのでこの登録を解除します。「編集」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/19e5d8c6-5d7b-2cee-68c9-e8c1f423f2c1.png)

5. これまで作成していた EC2 インスタンスを選択して「削除」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/1e92fec3-9f25-d848-d678-d1a0ea452a89.png)

6. 削除対象とした EC2 インスタンスのステータスが「 draining 」となり登録解除処理が開始されます。しばらくするとこれらは登録済みターゲットからなくなります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/83cc8671-6271-c5aa-d8e5-3816697d2bb2.png)

7. 登録解除した EC2 インスタンスは不要となります。忘れずにインスタンスの「終了」をしておきましょう。

**お疲れさまでした！　これで完了です。**

# あとがき

今回の設定作業により、 万が一 EC2 インスタンスが障害などで終了しても自動的に新たな EC2 インスタンスが起動してくるようになります。またロードバランサののヘルスチェックと連動させておりますので、例えば、どちらかの EC2 インスタンスの Web サーバにアクセスできない状態 (=Nginx を停止するなど) となると、新たな EC2 インスタンスが起動し、アクセスできない EC2 インスタンスは自動的に終了します。また起動数も設定変更で簡単に制御できますのでいろいろ試してみてください。

7 回にわたって連載形式で様々な AWS サービスを試してきました。私自身、ほとんど触ってこなかったサービスをこの連載を通じて学ぶことができ、とても大きな収穫でした。

最後までお付き合いいただき、ありがとうございました！