Auto ScalingのHealth Check、Scaling by Policy
Auto ScalingのHealth Check
前回は、Auto ScalingをCLIから使う基本的な方法をお伝えしましたので、今回はもうちょっと詳しくお伝えします。
まずは、Auto Scalingグループを削除する方法です。
$ as-delete-auto-scaling-group mygroup1 --region ap-northeast-1 Are you sure you want to delete this AutoScalingGroup? [Ny]y as-delete-auto-scaling-group: Service error: You cannot delete an AutoScalingGroup while there are instances still in the group. AWSRequestId:79d96c3f-c817-11e0-9095-c97d2522c411
Auto Scalingグループ内にまだインスタンスがあるから消せないと起こられます。面倒ですね。しかし、force-deleteオプション指定でまとめて消せます。
$ as-delete-auto-scaling-group mygroup1 --region ap-northeast-1 --force-delete Are you sure you want to delete this AutoScalingGroup? [Ny]y OK-Deleted AutoScalingGroup
無事に削除することができました。改めてグループを作成します。
$ as-create-auto-scaling-group mygroup1 ¥ --region ap-northeast-1 --availability-zones ap-northeast-1a ¥ --launch-configuration t1config --max-size 2 --min-size 1 OK-Created AutoScalingGroup
インスタンスの健康状態
全てのインスタンスは、健康(Healthy)な状態で起動します。Auto Scalingは、外部から通知を受け取ることによって健康から不健康(Unhealthy)になります。外部というのは、Amazon EC2、Elastic Load Balancing、SetHealthStatusコマンドの3つです。全てのAuto Scalingグループは、デフォルトでAmazon EC2からの通知を受け取るように設定されています。ELBを指定することによって、Amazon EC2に加えて、ELBでも通知を受け取るようになります。インスタンスがUnhealthyになると、直ちにリプレース対象になります。
それでは、ヘルスチェック対象をELBに変えます。
$ as-update-auto-scaling-group mygroup1 --region ap-northeast-1 –-health-check-type ELB OK-Updated AutoScalingGroup
下準備などが必要なこともあると思うので、ヘルスチェックを開始する猶予時間を設定することができます。
$ as-update-auto-scaling-group mygroup1 --region ap-northeast-1 –-grace-period 300 OK-Updated AutoScalingGroup
起動されているインスタンスを消すことでUnhealthyに変更することもできますが、コマンドラインからステータスを変更することもできます。
$ as-set-instance-health i-30d18d31 --region ap-northeast-1 --status Unhealthy OK-Instance Health Set
実際にUnhealthyか確認します。
$ as-describe-auto-scaling-groups --region ap-northeast-1 AUTO-SCALING-GROUP mygroup1 t1config ap-northeast-1a 1 2 1 INSTANCE i-30d18d31 ap-northeast-1a Terminating Unhealthy t1config
猶予時間を300秒設定していましたね。5分待ちます。。。。
$ ec2-describe-instances --region ap-northeast-1 RESERVATION r-50184c51 771293814336 default INSTANCE i-74d38f75 ami-300ca731 ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal running 0 t1.micro 2011-08-16T15:24:01+0000 ap-northeast-1a aki-d209a2d3 monitoring-enabled XXX-XXX-XXX-XXX XXX-XXX-XXX-XXX ebs paravirtual xen 8ec63037-74bd-454c-96ea-55e6da162203 sg-06c26807 default BLOCKDEVICE /dev/sda1 vol-07cbcd6d 2011-08-16T15:24:22.000Z TAG instance i-74d38f75 aws:autoscaling:groupName mygroup1
5分待ちましたので改めてグループ情報を見てみます。
$ as-describe-auto-scaling-groups --region ap-northeast-1 AUTO-SCALING-GROUP mygroup1 t1config ap-northeast-1a 1 2 1 INSTANCE i-74d38f75 ap-northeast-1a InService Healthy t1config
先ほど強制的にUnhealthyだったステータスが5分後にヘルスチェックによってHealthyに変更されました。ヘルスチェックの結果、スケールアウトまたはスケールインする必要がなかったのでインスタンス数に変動はありませんでした。
いろいろポリシーを作って試す
ポリシーは主に外部から呼び出させます。インスタンス数を倍にするときには、100%UPを指定をします。adjustmentは増減値を指定し、typeは方法を指定しています。
$ as-put-scaling-policy mypolicy1 --region ap-northeast-1 -g mygroup1 --name "double size" --adjustment 100 --type PercentChangeInCapacity arn:aws:autoscaling:ap-northeast-1:771293814336:scalingPolicy:d1a04000-bcaf-458c-88ba-81f8e40a3095:autoScalingGroupName/mygroup1:policyName/double size
インスタンス数を1つ減らすポリシーを作成します。
$ as-put-scaling-policy mypolicy1 --region ap-northeast-1 -g mygroup1 --name "scale down" --adjustment=-1 --type ChangeInCapacity arn:aws:autoscaling:ap-northeast-1:771293814336:scalingPolicy:a2bf2451-bd81-4f28-9eb3-fc301c3f00b8:autoScalingGroupName/mygroup1:policyName/scale down
同じく、インスタンス数を1つ増やすポリシーを作成します。
$ as-put-scaling-policy mypolicy1 --region ap-northeast-1 -g mygroup1 --name "scale out" --adjustment=1 --type ChangeInCapacity arn:aws:autoscaling:ap-northeast-1:771293814336:scalingPolicy:f67f4b41-2cc3-4e7d-bcb9-995fccc1db87:autoScalingGroupName/mygroup1:policyName/scale out
それでは、インスタンス数を2倍にするポリシーをコマンドから実行してみましょう。
$ as-execute-policy mypolicy1 --name "double size" -g mygroup1 --region ap-northeast-1 OK-Executed Policy
確かにグループ内のインスタンスが2倍になりました。ちなみに、ポリシー内容を更新したい場合には同じポリシー名で作成すれば上書きされます。削除する場合には削除コマンドがあります。また、ポリシーを一時停止するには、Suspendコマンドで停止できます。これでポリシーは動作しません。再開するにはResumeコマンドが必要です。
$ as-suspend-processes mygroup1 --region ap-northeast-1 OK-Processes Suspended
グループのポリシーが一時停止されているか確認します。
$ as-describe-auto-scaling-groups --region ap-northeast-1 AUTO-SCALING-GROUP mygroup1 t1config ap-northeast-1a 1 2 2 INSTANCE i-74d38f75 ap-northeast-1a InService Healthy t1config INSTANCE i-eaca96eb ap-northeast-1a InService Healthy t1config SUSPENDED-PROCESS ReplaceUnhealthy User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS AlarmNotification User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS Launch User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS AddToLoadBalancer User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS AZRebalance User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS ScheduledActions User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS Terminate User suspended at 2011-08-16T16:20:33Z mygroup1 SUSPENDED-PROCESS HealthCheck User suspended at 2011-08-16T16:20:33Z mygroup1
確かに一時停止しているようです。では、再開します。
$ as-resume-processes mygroup1 --region ap-northeast-1 OK-Processes Resumed $ as-describe-auto-scaling-groups --region ap-northeast-1 AUTO-SCALING-GROUP mygroup1 t1config ap-northeast-1a 1 2 2 INSTANCE i-74d38f75 ap-northeast-1a InService Healthy t1config INSTANCE i-eaca96eb ap-northeast-1a InService Healthy t1config
先ほど、インスタンスを2倍に増やしたので、1つインスタンスを減らしてみます
$ as-execute-policy mypolicy1 --name "scale down" -g mygroup1 --region ap-northeast-1 OK-Executed Policy
確かにインスタンスが減りました。
まとめ
前回に引き続きしつこくAuto Scalingについて使い方を解説しました。次回は、スケジュールで起動するポリシーやCloudWatch連携についてです。