2012年9月21日金曜日

"Auto Scaling"の"Scaling Policy"を作成し"CloudWatch"と連携してみる

スズキです。

下記に引き続き、CDPの「Scale Outパターン」ネタです。
コマンドラインツール使ってVPCで"Auto Scaling"


今回は「実装」の部分の
  • EC2数を増減させるトリガーとなる条件(メトリクス)を定義する。
    EC2の平均CPU使用率、ネットワーク流量、セッション数、
    EBSのレイテンシーなどがよく使われる。
  • そのメトリクスをCloudWatchを使って監視し、
    一定の条件を満たすとアラームを出すように設定する。
  • アラームを受けた際、Auto ScalingがEC2数を増減するように設定する。
に関して、具体的に試してみます。
(前提として最初に紹介した記事の手順で"Auto Scaling Group"まで作成できているとします)

まずは"Scaling Policy"というものを作成します。これはEC2の増減に関するルールで、
下記のように作成することができます。
# as-put-scaling-policy vpc-sp-out \
> --auto-scaling-group vpc-ag \
> --adjustment 1 \
> --type ChangeInCapacity
arn:aws:autoscaling:ap-northeast-1:811118151095:scalingPolicy:f7340c54-284e-49db-a0cb-bb5019305719:autoScalingGroupName/vpc-ag:policyName/vpc-sp-out
"--adjustment"の値を、"--type"の方法で増減するようになっており、
上記は、1インスタンスずつ増やしていくポリシーとなります。

"--type"で指定できる値は下記で確認でき、
# as-describe-adjustment-types
ADJUSTMENT-TYPE  ChangeInCapacity
ADJUSTMENT-TYPE  ExactCapacity
ADJUSTMENT-TYPE  PercentChangeInCapacity
それぞれの値は次のような意味を持ちます。
  • ChangeInCapacity : 指定した値だけ既存の値から増減させる
  • ExactCapacity : 既存の値に関係なく指定した値にする
  • PercentChangeInCapacity : 指定した値を百分率とした割合で増減させる

ポリシーが作成できたら、試しにこのポリシーを下記のように手動で実行してみます。
# as-execute-policy vpc-sp-out \
> --auto-scaling-group vpc-ag
OK-Executed Policy
# as-execute-policy vpc-sp-out \
> --auto-scaling-group vpc-ag
OK-Executed Policy
# as-describe-auto-scaling-instances
INSTANCE  i-4cca364f  vpc-ag  ap-northeast-1a  Pending    HEALTHY  vpc-lc
INSTANCE  i-dcc935df  vpc-ag  ap-northeast-1b  InService  HEALTHY  vpc-lc
1インスタンスづつ増えていることがわかると思います。

増加の次は減少です。
# as-put-scaling-policy vpc-sp-in \
> --auto-scaling-group vpc-ag \
> --adjustment=-1 \
> --type ChangeInCapacity
arn:aws:autoscaling:ap-northeast-1:811118151095:scalingPolicy:31c85fff-fb50-42db-a888-8be6cd973bfd:autoScalingGroupName/vpc-ag:policyName/vpc-sp-in
減少は値をマイナスにするだけですが"--adjustment=-1"を指定しなければなりません。

手動で実行すると、
# as-execute-policy vpc-sp-in \
> --auto-scaling-group vpc-ag
OK-Executed Policy
# as-execute-policy vpc-sp-in \
> --auto-scaling-group vpc-ag
OK-Executed Policy
# as-describe-auto-scaling-instances
INSTANCE  i-22cb3721  vpc-ag  ap-northeast-1a  Terminating  HEALTHY  vpc-lc
INSTANCE  i-baca36b9  vpc-ag  ap-northeast-1b  Terminating  HEALTHY  vpc-lc
1インスタンスづつ減っていることがわかると思います。

ちなみに"Scaling Policy"の削除は次のとおりです。
# as-delete-policy vpc-sp \
> --auto-scaling-group vpc-ag
    Are you sure you want to delete this policy? [Ny]y
OK-Deleted Policy

"Scaling Policy"ができたら、CloudWatchにてELBのレイテンシーの値をトリガーにして
上記のポリシーが実行されるように設定します。(AWSコンソールでできます)


対象のメトリクス(ELBのLatency)を選択したら、
そこからアラームを作成(Create Alarm)します。


アラームはレイテンシーが3秒以上になったら発生するようにしています。


そして、そのアラームにアクションを定義します。


アラーム状態(レイテンシーが3秒以上)になったら、"Auto Scaling Group"が"vpc-ag"の
1インスタンスづつ増やすスケールアウトポリシー(vpc-sp-out)を自動で実行する、
といった感じです。


同様にレイテンシーが1秒以下になったらスケールインする設定もしておきます。


次はJMeterで負荷かけて挙動を確認してみますが、JMeterネタもあります...
--------
http://www.suz-lab.com

0 コメント: