【Auto Scaling】ターゲットトラッキングスケーリングポリシーを設定してみた 〜その② 動作確認〜

記事タイトルとURLをコピーする

こんにちは、技術1課の折戸です。

あいも変わらず、今日も屋根裏からお送りします。

今回は前回設定した、Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーを、
実際にスケールアウト/インする様子をコンソール上で確認する方法をご紹介します。

ターゲットトラッキングスケーリングポリシーの概要や設定については前回の記事をご覧ください。

blog.serverworks.co.jp

スケールアウト用 CloudWatch アラームメトリクスの把握

まずはCloudWatch アラームのメトリクスでスケールアウト条件を確認します。

CloudWatch > アラーム > TargetTracking-[AutoScalig名]-AlarmHigh-[…] がスケールアウト用のメトリクスアラームです。

f:id:swx-orito:20220204234154p:plain

横に伸びる赤いラインが閾値です。

今回はターゲット値を50と設定したことで閾値が50となっています。
スケールアウトの条件は
3分内の3データポイントのRequestCountPerTarget > 50
となっております。

RequestCountPerTarget とはドキュメントによると

docs.aws.amazon.com

ターゲットグループ内の各ターゲットによって受信されたリクエストの平均数。

ということで、
これらの情報を今回の設定に落とし込んで要約すると

1分間のALB配下の2台のインスタンスへリクエストされた平均数(合計数÷2台のインスタンス)が3分連続で50を上回るとアラーム状態となり、スケールアウト処理が発動するということになります。

では実際にALBへリクエストの負荷をかけて状況を確認します。

ALBへリクエストの負荷をかける

今回はwatchコマンドとcurlコマンドの合わせ技でAutoScalingグループが稼働しているALBのDNSへリクエストを送り続けます。

% watch -n 【実行秒数】 curl -s "http://【ALBのDNS】/"

このコマンドを実行すると、【実行秒数】の間隔でcurlコマンドを実行し続けてくれます。

今回のポリシーの50の閾値を超えるためには
60秒(1分)で、50(回)x2(台)=100回 以上のリクエスト数が必要なので、100÷60=1.666...
毎秒約1.7回以上のリクエスト間隔が必要です。

今回はよりわかりやすく毎秒10回となるように実行秒数を0.1(watchコマンドで指定できる最小間隔)としました。

% watch -n 0.1 curl -s "http://【ALBのDNS】/"

また、この負荷試験は実行環境にCPU負荷がかかるコマンドなので、影響がない環境で実行することをおすすめします。

それではコマンドを実行し、メトリクスアラームを確認しながら実際にスケールアウトする様子を確認していきます。

実行後数分経過

f:id:swx-orito:20220219234511p:plain 徐々にリクエストが増えてきたことが確認できます。

さらに数分経過

f:id:swx-orito:20220219235030p:plain 50の閾値を超えました。
が、この状態が3分続かないとスケールアウトしません。

さらに数分経過

f:id:swx-orito:20220220001358p:plain 3分継続して50の閾値を超えました。
ステータスがアラーム状態へと変わります。

スケールアウトしていることを確認しましよう。

スケールアウト 確認

EC2 > Auto Scaling グループ > 作成したAuto Scaling グループ名 > アクティビティ f:id:swx-orito:20220220002252p:plain

Launching用のアクティビティが追加され、
しばらくすると、ステータスがSuccessfulとなります。
これで、2台から3台へスケールアウトしたことを確認できました。

それではスケールインの挙動を確認しましょう。

スケールイン用 CloudWatch アラームメトリクスの把握

TargetTracking-[AutoScalig名]-AlarmLow-[…] がスケールイン用のメトリクスアラームです。

f:id:swx-orito:20220220004723p:plain

15分内の15データポイントのRequestCountPerTarget < 35 となっています。

リクエスト平均数(合計数÷2台のインスタンス)が15分連続で35を下回るとスケールイン処理が発動します。

ではwatchコマンドをCtrl+cでキャンセルし、15分以上気長に待ちましょう。

watchコマンドキャンセル後約15分経過

f:id:swx-orito:20220220005653p:plain 15分継続して35の閾値を下回りました。
ステータスがアラーム状態へと変わります。

スケールインされることを確認しましよう。

スケールイン 確認

EC2 > Auto Scaling グループ > 作成したAuto Scaling グループ名 > アクティビティ

f:id:swx-orito:20220220010113p:plain Terminating用のアクティビティが追加されます。
ステータスは WaitingForELBConnectionDraining です。

f:id:swx-orito:20220220010312p:plain 少し経過するとInProgress ステータスへ変わりました。

f:id:swx-orito:20220220010512p:plain Successful となり、3台から2台へのスケールイン処理が完了しました。

お疲れさまです。

最後に

実際に負荷をかけて動作する様子を確認することで、Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーの条件を正確に把握することができました。
また、この確認方法はスケーリングポリシーの環境構築後のテストとしても利用できるような内容ですので、少しでもAutoScalingを導入される方のご参考になれば幸いです。

では。

折戸 亮太(執筆記事の一覧)

2021年10月1日入社
クラウドインテグレーション部技術1課

屋根裏エンジニア