今回は、先日書籍(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)監修のもと掲載しています。
元記事は、こちら