今回は、先日書籍(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秒以下になったらスケールインする設定もしておきます。