Amazon EC2でオートスケーリングを行う方法

今回は「オートスケーリング」について調べた。オートスケーリングでは,サーバの負荷具合を監視し,サーバの冗長化を自動化することができるので,オートスケーリングはロードバランシングと組み合わせることで真価を発揮する。今回はロードバランシングが行われているという前提で,オートスケーリングの設定方法について説明する。

オートスケーリングとは

オートスケーリングとは,Amazon EC2のインスタンスを,自動的に縮小・拡張することができる機能である。
サーバのスペックを上げることを「スケールアップ」,サーバのスペックを下げることを「スケールダウン」,サーバの台数を増やすことを「スケールアウト」,サーバーの台数を減らすことを「スケールイン」と呼ぶがこのうちの「スケールアウト」と「スケールイン」を自動で行ってくれるのが「オートスケーリング」である。

オートスケーリングが行われる仕組み

オートスケーリングはAWSの複数のサービスが組み合わさって動作するので,一見すると難しく感じる。なので,まずは抵抗感を無くすためにオートスケーリングの全体像を掴む必要があると思う。

以下は「スケールアウト」と「スケールイン」を行う際の全体像を表した図である。

all_of_autoscaling

まとめると「スケールアウト」と「スケールイン」は以下のような順序で行われる。

スケールアウトを行う場合

  • Scale Out Alarmがサーバの負荷を監視する
  • サーバの状態がScale Out Alarmの閾値を超えたときにAuto Scaling Groupsに通知する
  • 通知を受けたAuto Scaling GroupsはScale Out Policyに従ってスケールアウトを行う

スケールインを行う場合

  • Scale In Alarmがサーバの負荷を監視する
  • サーバの状態がScale In Alarmの閾値を超えたときにAuto Scaling Groupsに通知する
  • 通知を受けたAuto Scaling GroupsはScale In Policyに従ってスケールインを行う

オートスケーリングを設定する

これでオートスケーリングを行うための土台となる知識が揃った。ロードバランサーが既に作成されているという前提で,以下よりオートスケーリングを設定する方法について説明する。
オートスケーリングは大きく分けて「Launch Configuration」と「Auto Scaling Groups」の2つのメニューから設定する必要がある。以下より,それぞれ説明する。

Launch Configuration

Management ConsoleのAmazon EC2内のメニューからLaunch Configurationを選択する。続いてメニュー内のCreate launch configurationを選択する。

Choose AMI

スケールアウトで追加されるインスタンスを設定する。今回はロードバランシングを前提としているので,My AMIsからウェブサーバを設定済みのAMIを選択する。
設定が終わったらNext: Configure detailsを選択する。

Choose Instance Type

インスタンスのスペックを設定する。今回はt1.microを選択する。
設定が終わったらNext: Configure detailsを選択する。

Configure details

インスタンスの詳細情報を設定する。今回はNameに「Test」と入力する。
設定が終わったらNext: Add Storageを選択する。

Add Storage

インスタンスに紐付けられるストレージの容量を設定する。今回はデフォルトのままで変更は無し。
設定が終わったらNext: Configure Security Groupを選択する。

Configure Security Group

セキュリティグループを設定する。既にセキュリティグループが作成されていれば,そちらを使用しても良い。このセキュリティグループは,HTTPプロトコルでのアクセスが許可されている必要がある。許可されていない場合は,ロードバランサーとの連携できないので注意したい。
設定が終わったらReviewを選択する。

Review

設定を確認してCreate launch configurationを選択する。最後にキーペア(公開鍵と秘密鍵)を設定し,確認用のチェックボックスにチェックを付けてCreate launch configurationを選択する。

以上で,Launch Configurationの設定は完了である。

完了するとCreate an Auto Scaling group using this launch configurationが表示されるので,これを選択することでもAuto Scaling Groupsの設定画面に入ることができる。
続いてAuto Scaling Groupsを設定する。

Auto Scaling Groups

Management ConsoleのAmazon EC2内のメニューからAuto Scaling Groupsを選択する。続いてメニュー内のCreate Auto Scaling groupを選択する。

ラジオボタンのCreate an Auto Scaling group from an existing launch configurationを選択し,先ほどLaunch Configurationで作成した「Test」を選択してNextStepを選択する。

Configure Auto Scaling group details

オートスケーリングの詳細情報を設定する。Group nameには「TestGroup」と入力する。Group sizeはスケーリング開始時のインスタンス数なので,今回はデフォルトの「1」のままにする。Networkもデフォルトの「Launch into EC2-Classic」のままにし,Availability Zone(s)には「ap-northeast-1a」を設定する。Advanced DetailsのReceive traffic from Elastic Load Balancer(s)にチェックをし,作成済みのロードバランサーを設定する。

SettingsForAdvancedDetails

設定が終わったらNext: Configure scaling policiesを選択する。

Configure scaling policiesフェイズ

冒頭で図を交えて説明した「スケールサイズ」「Scale Out Alarm」「Scale In Alarm」「Scale Out Policy」「Scale In Policy」をそれぞれ設定する。

まずは「スケールサイズ」を設定するために「Scale between 1 and 1 instances.」の箇所を「Scale between 1 and 2 instances.」に変更する。このようにすることでインスタンスは最低1個,最大で2個の間でスケーリングを行うことができる。

続いてIncrease Group Sizeを設定する。これは直訳すると「グループサイズを増やす」となるので「Scale Out Policy」にあたる設定である。ここで設定されるアラームが「Scale Out Alarm」にあたるものである。
設定項目が多いが今回は下記の画像のように設定した。

SettingsForIncreaseGroupSize

Execute policy whenについてはAdd new alarmからアラームを追加する。設定については以下画像を参考にしてほしい。

CreateAlarm

上記では,平均CPU使用率が80%以上である状態が5分以上続く場合が1回以上あるときにスケールアウトする。

次に,Decrease Group Sizeを設定する。これは直訳すると「グループサイズを小さく」となるので,「Scale In Policy」にあたる設定である。ここで設定されるアラームが「Scale In Alarm」にあたるものである。

今回は下記の画像のように設定した。

SettingsForDecreaseGroupSize
 
こちらもExecute policy whenについてはAdd new alarmからアラームを追加する。以下画像を参考にしてほしい。

CreateAlarm2

上記では,平均CPU使用率が80%未満である状態が5分以上続く場合が1回以上あるときにスケールインする。

設定が終わったらNext: Configure Notificationsを選択する。

Configure Notifications

インスタンスの作成,削除,作成失敗,削除失敗のタイミングでそれぞれメールアドレスに通知するように設定することができる。今回は特に設定はせず,Reviewを選択する。

Review

設定を確認し,Create Auto Scaling groupを選択する。

以上でオートスケーリングの設定は完了である。今回は5分間の平均CPU負荷が80%以上のときにスケールアウトし,5分間の平均CPU負荷が80%未満のときにスケールインするように設定してあるのでApache BenchやJMeterなどの負荷テストツールを用いて,インスタンスの負荷が80%以上になるように調整し,スケールアウト・スケールインが行われることを確認してみると良いだろう。インスタンスのCPU負荷の詳細はインスタンスメニューのMonitoringから確認することができる。

参考
Auto Scalingの薄い説明書を作ってみた