CONTACT
お問い合わせ

EC2 AutoScaling環境を構築しスケールアウト・スケールインの動作を確認する

AutoScalingグループを作成して自動でスケールアウト・スケールインする環境を構築し、動作を確認する。

目次

  1. 概要
  2. 構成図
  3. 構築手順
  4. 実演

1.概要

ドメイン取得およびSSL/TSLサーバ証明書取得しWebサイト(EC2:Tomcat+RDS)を構築する」にて構築した環境に手を加え、サーバの負荷状況によってスケールアウト・スケールインを自動で行う環境を構築する。負荷掛けはApacheBenchを使用する。

2.構成図

構成図は以下の通り。

3.構築手順

  1. ALBを修正する
  2. EC2を修正する
  3. AMIを作成する
  4. 起動テンプレートを作成する
  5. AutoScalingグループを作成する

3-1.ALBを修正する

現状のALBのtargetsは前回作成した2つのEC2インスタンスを参照するようになっている。

今回作成したAutoScalingが作成したインスタンスのみとしたいため、2つのインスタンスをtargetsから削除をする。

ALBのターゲットグループのtargetsからインスタンスを削除する。

3-2.EC2を修正する

現状、ALBにてポート番号:443で受けて8080へ転送するよう設定しているが、AutoScalingで作成されたEC2インスタンスへは標準では80へ転送となる。そのため、EC2では80で受け取り、8080へ転送するようapache設定を行う。

apacheをインストールする。

sudo yum -y install httpd
sudo systemctl enable httpd.service
service httpd restart

下記定義をapacheの設定ファイルに追加する。

LoadModule proxy_module modules/mod_proxy.so
<IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</IfModule>

3-3.AMIを作成する

スケールアウトされた際に自動で作成されるEC2インスタンスは、起動テンプレートを元に作成される。

その起動テンプレートが使うAMI(EC2のイメージ)を作成する。

前回作成したEC2インスタンスからAMIを作成する。

AMIが作成された。

3-4.起動テンプレートを作成する

作成したAMIを使った起動テンプレートを作成する。

起動テンプレートが作成された。

3-5.AutoScalingグループを作成する

AutoScalingグループを以下の要領で作成する。(平均CPU使用率が40%を超えたら最大3つまでEC2インスタンスを追加)

希望する容量 1
最小キャパシティ 1
最大キャパシティ 3
スケーリングポリシー:メトリクスタイプ 平均CPU使用率
スケーリングポリシー:ターゲット値 40

AutoScalingグループに対してALBを紐づけする。

グループサイズとスケーリングポリシーを設定する。

AutoScalingグループの作成が完了した。

AutoScalingグループを作成すると、CloudWatchにアラームが追加された。

上限しきい値(スケールアウトする条件) 3 分内の3データポイントのCPUUtilization > 40
下限しきい値(スケールインする条件) 15 分内の15データポイントのCPUUtilization < 28

EC2インスタンス一覧を確認するとインスタンスが自動で1つ作成されている。

自動生成されたインスタンスにALB経由で接続してアプリが正しく動くことを確認する。

4.実演

以下の手順でAutoScalingの動作を確認する。

  1. ApacheBenchによる負荷掛けを行う
  2. スケールアウトの確認をする
  3. スケールインの確認をする

4-1.ApacheBenchによる負荷掛けを行う

以下コマンドを発行し、構築したサーバに対して負荷をかける。

ab -c 50  -n 200000 https://www.z-frontier.com/HelloApp/sample

<コマンドのパラメータ>

パラメータ 説明
-c 並列数を指定
-n 総リクエスト数を指定
URL 負荷を掛けるサイトのURL

-c 50 -n 200000 と指定した場合、50並走で200000リクエスト発行するまで実行する。

4-2.スケールアウトの確認をする

1台当たりのCPU利用率が上限しきい値の40%を超えた。(下記グラフはインスタンス#1のCPU利用率)

上限しきい値のアラームがアラーム状態になっている。

2つ目のインスタンスが自動的に作成された。(スケールアウトした)

2並走となったため、1台当たりのCPU使用率は落ちたが、それでも上限40%は超えた状態が続いている。

さらにインスタンスが追加され、3並走となった。

3並走となったことで、1台当たりの負荷はさらに減った。

4-3.スケールインの確認をする

ApacheBenchの負荷掛けを停止し、状況を見る。

(以下はApacheBenchを停止した際に出力されたログ)

$ ab -c 50  -n 200000 https://www.z-frontier.com/HelloApp/sample
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.z-frontier.com (be patient)
Completed 20000 requests
Completed 40000 requests
Completed 60000 requests
Completed 80000 requests
Completed 100000 requests
^C

Server Software:
Server Hostname:        www.z-frontier.com
Server Port:            443
SSL/TLS Protocol:       TLSv1/SSLv3,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /HelloApp/sample
Document Length:        245 bytes

Concurrency Level:      50
Time taken for tests:   856.848 seconds
Complete requests:      115771
Failed requests:        0
Write errors:           0
Total transferred:      62979424 bytes
HTML transferred:       28363895 bytes
Requests per second:    135.11 [#/sec] (mean)
Time per request:       370.062 [ms] (mean)
Time per request:       7.401 [ms] (mean, across all concurrent requests)
Transfer rate:          71.78 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       50  163  60.7    158    2317
Processing:    26  207 151.4    163    3278
Waiting:       26  200 152.4    153    3278
Total:         78  370 171.7    321    3393

Percentage of the requests served within a certain time (ms)
  50%    321
  66%    363
  75%    443
  80%    500
  90%    579
  95%    650
  98%    719
  99%    771
 100%   3393 (longest request)

停止して少し経った状態。CPU使用率は0%程度になっている。

下限のCPU利用率28%よりも小さくなったため、アラート状態となった。

3つのインスタンスのうち、一つが「終了済み」となった。(スケールインした)

さらに待つとまたインスタンスが「終了済み」となった。

以上。