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

前回,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の薄い説明書を作ってみた

Article written by

2 Responses

  1. 〈2015年版〉AWSでWordPress用の冗長構成を構築する(ELB,EC2,S3,CloudFront,RDS) -WordPressPerson

    […] 最後に、高負荷時に自動でインスタンスを追加して負荷分散を行えるよう、AutoScalingを設定します。 僕の構成したケースでは、同時アクセスの増加によってWebサーバーのメモリが問題となるケースが多いので、Webサーバーのメモリ使用率を監視し、90%を超えると自動でインスタンスを追加するよう設定しています。 CloudWatchのカスタムメトリクスでFreeMemoryMBytes、UsedMemoryPercent、LoadAverage、Stealを取得 Amazon EC2でオートスケーリングを行う方法 […]

  2. EC2のあまり触っていないところ | takayukii.blog

    […] Amazon EC2でオートスケーリングを行う方法 – 技術の犬小屋 […]

コメントを残す