概要
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カスタムメトリクスを使えば
要件に合わせてスケーリングすることが出来ます!
投稿者プロフィール
- 2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。