Auto Scalingで遊んでみる。

Auto Scalingとは

お客様が定義する条件に応じて、Amazon EC2 の能力を、自動的に縮小・拡張することができます。

拡張よりも縮小が自動でできることがありがたい。

Auto Scalingの設定はAmazon Management ConsoleからGUIで設定することが現在できませんのでツールの用意を行います。

brewで下記コマンドを投入したらOK

$ brew install auto-scaling

viva brew!!!ってな感じです。

Auto Scalingの流れは下記のようになってます。

Amazon EC2/S3/EBS クラウドコンピューティングによる仮想サーバ構築

のP.60 AutoScalingの設定に詳しく書かれています。

  1. スケールアウト時に起動するAMIを指定
  2. インスタンスの最小・最大数、ゾーンを指定する「グループ」を設定
  3. スケールアウトを実行するトリガとなるしきい値を設定

まず、スケールアウト時に起動するAMIを指定

as-create-launch-config Launch設定名 –image-id AMIID –instance-type インスタンスのタイプ –group セキュリティグループ –key キーペア名 で設定します。

下記の設定は AMI(ami-xxxxxx)をMicro Instanceで東京Regionにて起動する設定。

$ as-create-launch-config AS201201 –image-id ami-xxxxxx –instance-type t1.micro –region ap-northeast-1 –group “XXXXXXX” –key XXXXXX-key

「OK-Created launch config」というメッセージが表示されます。

launch configが正しく設定されたかは下記コマンドで表示させます。

$ as-describe-launch-configs –region ap-northeast-1
LAUNCH-CONFIG AS201201 ami-xxxxxx t1.micro

Launch名が表示されたら正しく設定されています。

続いて「インスタンスの最小・最大数、ゾーンを指定する「グループ」を設定」を行います。

as-create-auto-scaling-group AutoScalingグループ名 –launch-configuration Launch設定名 –availability-zones 配置したいAvailabilityZode名 –load-balancers ロードバランサー名 –max-size 最大起動インスタンス数 –min-size 最小起動インスタンス数 –region 起動するRegion

$ as-create-auto-scaling-group WP-AS –launch-configuration AS201201 –availability-zones=ap-northeast-1a,ap-northeast-1b –load-balancers barasuLB –max-size 3 –min-size 1 –region ap-northeast-1

Auto Scaling Groupが正しく設定されたかは下記コマンドを入力します。

$ as-describe-auto-scaling-groups –region ap-northeast-1
AUTO-SCALING-GROUP WP-AS AS201201 ap-northeast-1b,ap-northeast-1a barasuLB 1 3 1
INSTANCE i-0fff2e0f ap-northeast-1a InService Healthy AS201201

Auto Scaling Groupが設定された瞬間に min-sizeが1以上であればその数自動的に登録したAMIが起動します。起動後にLoadBalancer配下に自動的に入ります。

min-seize が1以上であれば障害発生してサーバ(instance)が落ちても自動的に別のサーバが起動しLoadBalancer配下に入りることになります。単純に落ちないシステムが簡単に構築可能*^o^*

ここまでの処理は落ちたら起動するというAuto Scalingの設定でした。
次にスケールアウトを実行するトリガとなるしきい値を設定します。

今回はCPU使用率が平均65%が5分間続いたら自動的にScalingするように設定します。
拡張(+1)するポリシーを設定します。

$ as-put-scaling-policy UP-Policy –auto-scaling-group WP-AS –adjustment=1 –type ChangeInCapacity –cooldown 300 –region ap-northeast-1

同様に縮小(-1)するポリシーは下記のように設定

$ as-put-scaling-policy Down-Policy –auto-scaling-group WP-AS –adjustment=-1 –type ChangeInCapacity –cooldown 300 –region ap-northeast-1

確認

$ as-describe-policies –region ap-northeast-1
SCALING-POLICY WP-AS Down-Policy -1 ChangeInCapacity 300 arn:aws:autoscaling:ap-northeast-1:426070445735:scalingPolicy:ab0f1b93-97dd-4c30-9fcd-ed4d097bd809:autoScalingGroupName/WP-AS:policyName/Down-Policy
SCALING-POLICY WP-AS UP-Policy 1 ChangeInCapacity 300 arn:aws:autoscaling:ap-northeast-1:426070445735:scalingPolicy:5b3db0e2-7fe0-4f4a-bea1-fae8bbcd76cf:autoScalingGroupName/WP-AS:policyName/UP-Policy

そのポリシーをキックするにはCloudWatchを利用します。
AWS Management ConsoleのCloudWatchタブを選択してCreateAlarmを押下します。

Viewingは「EC2: Aggregated by Auto Scaling Group」を選択します。

作成したAuto Scaling Groupの「CPU Utilization」を選択し「Continue」を押下します。

Name:は適当に決めます。CPU負荷が65%続いたらなので CPU_Average_65とかにしておきます。
This alarm will enter the ALARM state when CPUUtilization isで>= 65 for 5に設定。

Take actionを「Auto Scaling Policy」Auto Scaling Groupを設定したグループを選びPolicyをAddするPolicyを設定します。

「Add Action」を押下して完了です。

参考URL
Amazon WebserviceのAuto Scalingの設定について

CPU負荷を与えてAuto Scalingが動くことを確認する。
CPU負荷を与えてしばらくしたらInstanceが起動したことを確認。
LoadBalancerの下にもちゃんと入っている。

負荷が下がるとAuto Scaling Groupに含まれるInstanceが「terminated」になる。

CPU負荷が上昇した時には自動的にAuto ScalingによりInstanceが増えることを確認
CPU負荷が低下したときにもちゃんとterminatedしてくれる。これで余分なお金がかからなくて済む^^;;
しばらくこれで運用してみます。