こんにちは、技術1課の折戸です。
あいも変わらず、今日も屋根裏からお送りします。
今回は前回設定した、Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーを、
実際にスケールアウト/インする様子をコンソール上で確認する方法をご紹介します。
ターゲットトラッキングスケーリングポリシーの概要や設定については前回の記事をご覧ください。
- スケールアウト用 CloudWatch アラームメトリクスの把握
- ALBへリクエストの負荷をかける
- スケールアウト 確認
- スケールイン用 CloudWatch アラームメトリクスの把握
- スケールイン 確認
- 最後に
スケールアウト用 CloudWatch アラームメトリクスの把握
まずはCloudWatch アラームのメトリクスでスケールアウト条件を確認します。
CloudWatch > アラーム > TargetTracking-[AutoScalig名]-AlarmHigh-[…] がスケールアウト用のメトリクスアラームです。
横に伸びる赤いラインが閾値です。
今回はターゲット値を50と設定したことで閾値が50となっています。
スケールアウトの条件は
3分内の3データポイントのRequestCountPerTarget > 50
となっております。
RequestCountPerTarget
とはドキュメントによると
ターゲットグループ内の各ターゲットによって受信されたリクエストの平均数。
ということで、
これらの情報を今回の設定に落とし込んで要約すると
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負荷がかかるコマンドなので、影響がない環境で実行することをおすすめします。
それではコマンドを実行し、メトリクスアラームを確認しながら実際にスケールアウトする様子を確認していきます。
実行後数分経過
徐々にリクエストが増えてきたことが確認できます。
さらに数分経過
50の閾値を超えました。
が、この状態が3分続かないとスケールアウトしません。
さらに数分経過
3分継続して50の閾値を超えました。
ステータスがアラーム状態へと変わります。
スケールアウトしていることを確認しましよう。
スケールアウト 確認
EC2 > Auto Scaling グループ > 作成したAuto Scaling グループ名 > アクティビティ
Launching用のアクティビティが追加され、
しばらくすると、ステータスがSuccessfulとなります。
これで、2台から3台へスケールアウトしたことを確認できました。
それではスケールインの挙動を確認しましょう。
スケールイン用 CloudWatch アラームメトリクスの把握
TargetTracking-[AutoScalig名]-AlarmLow-[…] がスケールイン用のメトリクスアラームです。
15分内の15データポイントのRequestCountPerTarget < 35
となっています。
リクエスト平均数(合計数÷2台のインスタンス)が15分連続で35を下回るとスケールイン処理が発動します。
ではwatchコマンドをCtrl+cでキャンセルし、15分以上気長に待ちましょう。
watchコマンドキャンセル後約15分経過
15分継続して35の閾値を下回りました。
ステータスがアラーム状態へと変わります。
スケールインされることを確認しましよう。
スケールイン 確認
EC2 > Auto Scaling グループ > 作成したAuto Scaling グループ名 > アクティビティ
Terminating用のアクティビティが追加されます。
ステータスは WaitingForELBConnectionDraining です。
少し経過するとInProgress ステータスへ変わりました。
Successful となり、3台から2台へのスケールイン処理が完了しました。
お疲れさまです。
最後に
実際に負荷をかけて動作する様子を確認することで、Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーの条件を正確に把握することができました。
また、この確認方法はスケーリングポリシーの環境構築後のテストとしても利用できるような内容ですので、少しでもAutoScalingを導入される方のご参考になれば幸いです。
では。