share facebook facebook twitter menu hatena pocket slack

2012.11.20 TUE

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

鈴木 宏康

WRITTEN BY 鈴木 宏康

今回は、先日書籍(Amazon Web Servicesクラウドデザインパターン設計ガイド)の発売も発表された
Cloud Design Pattern(CDP)の記事になります。
対象はコマンドラインツール使ってVPCでAuto Scalingに引き続き、「Scale Outパターン」です。

今回は「実装」の部分に関して、具体的に試してみます。

  • 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秒以下になったらスケールインする設定もしておきます。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。