レスポンスタイムでAuto Scaling

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

Auto Scalingで、サイトの表示時間が遅くなった時にEC2を増やす。

具体的には、

・管理サーバから対象サイトの応答時間を取得
・応答時間をCloudWatchに送信(カスタムメトリクス)
・カスタムメトリクスの値(=応答時間)に応じてEC2が増える

ということをやってみます。

スクリプトでCloudWatchにデータを送る

スクリプトを実行するEC2にIAMロールが必要です。
ドキュメントにあった下記ポリシーを使わせていただきました。

サイト応答時間を取得してCloudWatchに値を送るスクリプトをcronで動かします。
まずはサイトの応答時間を取得するコマンド。

次に、CloudWatchにデータを送信するコマンドです。

メトリクス名と名前空間は分かりやすいものを。
[値]にサイトの応答時間(curlコマンドの実行結果)が入ればOKです。

総合して、下記のようなスクリプトを作成しました。

このスクリプトを管理サーバのcronに仕込んで5分おきに実行させます。

すると、CloudWatchコンソールにてサイト応答時間のメトリクスが生成されました。

アラームの作成

CloudWatchコンソールより[アラームの作成]をクリック。

さきほど生成されたメトリクス(ResponceTime)を検索・選択して[次へ]。

今回は下記のようにアラームを定義しました。
問題なければ[アラームの作成]。

 

スケーリングポリシーの作成

設定したいAuto Scalingグループの設定画面より、
[スケーリングポリシー]タブの[ポリシーの追加]をクリック。
後は、下記を参考に設定して下さい。

[作成]をクリックして完了。

なお、これだけを設定するとEC2は増えるだけで減らないので、
別途スケールダウン用のポリシーを追加してください。

動作確認

Auto Scalingグループに属するインスタンスで、
stressコマンドを実行して負荷を上げてみます。

CloudWatchコンソールを確認すると、負荷に伴い
サイト応答時間が上昇しているのが分かります。
この値が10を超えた時にEC2が増えていれば成功です!

このように、CloudWatchカスタムメトリクスを使えば
要件に合わせてスケーリングすることが出来ます!

投稿者プロフィール

sato
2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。