【AWS Auto Scaling】ELBの組み合わせたオートヒーリング構築)


目標

ELBとAutoScalingを組み合わせ、障害時にもバックエンドインスタンス数を維持する仕組みを構築する(いわゆるオートヒーリングのみで、トラフィックに応じたスケールイン・アウトの仕組みは構築しない)

前提

ELB、及びそれに紐づくターゲットグループを構築済みであること(※)

※以下記事で作成を実施済み
【ELB基本設定】 ELBを作成し、httpアクセスをロードバランシングする

手順

1. 起動設定(Launch Configuration)作成

EC2コンソールの左枠にある起動設定をクリック後、起動設定の作成実行


②AMIの選択、インスタンスタイプの選択を行う
③起動設定(Launch Configuration)の詳細設定を行う

<設定内容>
名前: 任意
ユーザデータ: httpd自動起動用スクリプト(※下部記載)
アドレスタイプ: パブリック IP アドレスを各インスタンスに割り当てます。(※複数サブネットでのELB負荷分散を行っていない場合、デフォルト設定のままでOK)
それ以外: デフォルト設定

※httpd自動起動用スクリプト


#!/bin/bash
yum update -y
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum install -y httpd mariadb-server
systemctl start httpd
systemctl enable httpd
usermod -a -G apache ec2-user
chown -R ec2-user:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
echo `hostname` > /var/www/html/index.html

③セキュリティグループの設定
http80番ポートが開いているセキュリティグループを利用(httpをロードバランシングさせているため。通信内容に応じて設定は変わる)

④設定内容確認後、起動設定の作成をクリック

⑤キーペアの設定を行う
⑥正常に起動設定が作成されていることを確認

2. Auto Scalingグループの作成

①Auto Scalingグループの作成をクリック

②新しく作成するAuto Scalingグループと起動設定を紐づかせる
前述の手順で作成した起動設定にチェックを入れ、次のステップへ

③Auto Scalingグループの詳細設定を行う
<設定内容>
グループ名: 任意
グループサイズ: 任意(Auto Scaling開始時のグループ内における希望インスタンス数を設定)
ネットワーク: ELBが存在するVPCID
サブネット: ELBの振り分け先として指定されているサブネットID
ロードバランシング : ひとつまたは複数のロードバランサーからトラフィックを受信する
ターゲットグループ: 対象ELB配下のターゲットグループ
ヘルスチェックタイプ: ELBにチェック

④スケーリングポリシーの作成
今回はインスタンスを維持することのみが目標のため「このグループを初期のサイズに維持する」にチェック

⑤通知の設定(任意)
必要あれば通知設定を行う(指定したイベント発生時、メール通知がくるようになります)

⑥タグの設定(任意)(※)
※「新しいインスタンスにタグ付けする」にチェックを入れると、AutoScalingによって起動されたインスタンス全てに自動でタグが付きます

⑦設定内容確認後、Auto Scalingグループの作成をクリック

⑧作成したAuto Scalingグループが作成されていること、及びグループのインスタンスのヘルスステータスが「Healthy」であることを確認

⑨ロードバランサーのターゲットグループにも、Auto Scalingによって起動されたインスタンスが存在していることを確認

3. 動作検証(オートヒーリングの確認)

①AutoScaling内のインスタンスにログインし、httpdを停止する

[root@ip-172-31-39-108 ~]# systemctl stop httpd
[root@ip-172-31-39-108 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset                                                                             : disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           mqphp-fpm.conf
   Active: inactive (dead) since Tue 2020-06-02 11:12:08 UTC; 1min 21s ago
     Docs: man:httpd.service(8)
  Process: 3616 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, st                                                                             atus=0/SUCCESS)
 Main PID: 3616 (code=exited, status=0/SUCCESS)
   Status: "Total requests: 68; Idle/Busy workers 100/0;Requests/sec: 0.0687; By                                                                             tes served/sec:  33 B/sec"

Jun 02 10:55:26 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Jun 02 10:55:27 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Jun 02 11:12:07 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Jun 02 11:12:08 ip-172-31-39-108.ap-northeast-1.compute.internal systemd[1]: ...
Hint: Some lines were ellipsized, use -l to show in full.

②httpdを停止したインスタンスが終了しても、Auto Scalingグループ内のインスタンス数が維持されることを確認

⇒インスタンスが2つヘルスチェックに失敗し、終了中となってるが、グループ内インスタンス数は4つ維持されているためOK