Auto Scalingで遊んでみる。
お客様が定義する条件に応じて、Amazon EC2 の能力を、自動的に縮小・拡張することができます。
拡張よりも縮小が自動でできることがありがたい。
Auto Scalingの設定はAmazon Management ConsoleからGUIで設定することが現在できませんのでツールの用意を行います。
brewで下記コマンドを投入したらOK
$ brew install auto-scaling
viva brew!!!ってな感じです。
Auto Scalingの流れは下記のようになってます。
Amazon EC2/S3/EBS クラウドコンピューティングによる仮想サーバ構築
のP.60 AutoScalingの設定に詳しく書かれています。
- スケールアウト時に起動するAMIを指定
- インスタンスの最小・最大数、ゾーンを指定する「グループ」を設定
- スケールアウトを実行するトリガとなるしきい値を設定
まず、スケールアウト時に起動するAMIを指定
as-create-launch-config Launch設定名 –image-id AMIID –instance-type インスタンスのタイプ –group セキュリティグループ –key キーペア名 で設定します。
下記の設定は AMI(ami-xxxxxx)をMicro Instanceで東京Regionにて起動する設定。
$ as-create-launch-config AS201201 –image-id ami-xxxxxx –instance-type t1.micro –region ap-northeast-1 –group “XXXXXXX” –key XXXXXX-key
「OK-Created launch config」というメッセージが表示されます。
launch configが正しく設定されたかは下記コマンドで表示させます。
$ as-describe-launch-configs –region ap-northeast-1
LAUNCH-CONFIG AS201201 ami-xxxxxx t1.micro
Launch名が表示されたら正しく設定されています。
続いて「インスタンスの最小・最大数、ゾーンを指定する「グループ」を設定」を行います。
as-create-auto-scaling-group AutoScalingグループ名 –launch-configuration Launch設定名 –availability-zones 配置したいAvailabilityZode名 –load-balancers ロードバランサー名 –max-size 最大起動インスタンス数 –min-size 最小起動インスタンス数 –region 起動するRegion
$ as-create-auto-scaling-group WP-AS –launch-configuration AS201201 –availability-zones=ap-northeast-1a,ap-northeast-1b –load-balancers barasuLB –max-size 3 –min-size 1 –region ap-northeast-1
Auto Scaling Groupが正しく設定されたかは下記コマンドを入力します。
$ as-describe-auto-scaling-groups –region ap-northeast-1
AUTO-SCALING-GROUP WP-AS AS201201 ap-northeast-1b,ap-northeast-1a barasuLB 1 3 1
INSTANCE i-0fff2e0f ap-northeast-1a InService Healthy AS201201
Auto Scaling Groupが設定された瞬間に min-sizeが1以上であればその数自動的に登録したAMIが起動します。起動後にLoadBalancer配下に自動的に入ります。
min-seize が1以上であれば障害発生してサーバ(instance)が落ちても自動的に別のサーバが起動しLoadBalancer配下に入りることになります。単純に落ちないシステムが簡単に構築可能*^o^*
ここまでの処理は落ちたら起動するというAuto Scalingの設定でした。
次にスケールアウトを実行するトリガとなるしきい値を設定します。
今回はCPU使用率が平均65%が5分間続いたら自動的にScalingするように設定します。
拡張(+1)するポリシーを設定します。
$ as-put-scaling-policy UP-Policy –auto-scaling-group WP-AS –adjustment=1 –type ChangeInCapacity –cooldown 300 –region ap-northeast-1
同様に縮小(-1)するポリシーは下記のように設定
$ as-put-scaling-policy Down-Policy –auto-scaling-group WP-AS –adjustment=-1 –type ChangeInCapacity –cooldown 300 –region ap-northeast-1
確認
$ as-describe-policies –region ap-northeast-1
SCALING-POLICY WP-AS Down-Policy -1 ChangeInCapacity 300 arn:aws:autoscaling:ap-northeast-1:426070445735:scalingPolicy:ab0f1b93-97dd-4c30-9fcd-ed4d097bd809:autoScalingGroupName/WP-AS:policyName/Down-Policy
SCALING-POLICY WP-AS UP-Policy 1 ChangeInCapacity 300 arn:aws:autoscaling:ap-northeast-1:426070445735:scalingPolicy:5b3db0e2-7fe0-4f4a-bea1-fae8bbcd76cf:autoScalingGroupName/WP-AS:policyName/UP-Policy
そのポリシーをキックするにはCloudWatchを利用します。
AWS Management ConsoleのCloudWatchタブを選択してCreateAlarmを押下します。
Viewingは「EC2: Aggregated by Auto Scaling Group」を選択します。
作成したAuto Scaling Groupの「CPU Utilization」を選択し「Continue」を押下します。
Name:は適当に決めます。CPU負荷が65%続いたらなので CPU_Average_65とかにしておきます。
This alarm will enter the ALARM state when CPUUtilization isで>= 65 for 5に設定。
Take actionを「Auto Scaling Policy」Auto Scaling Groupを設定したグループを選びPolicyをAddするPolicyを設定します。
「Add Action」を押下して完了です。
参考URL
Amazon WebserviceのAuto Scalingの設定について
CPU負荷を与えてAuto Scalingが動くことを確認する。
CPU負荷を与えてしばらくしたらInstanceが起動したことを確認。
LoadBalancerの下にもちゃんと入っている。
負荷が下がるとAuto Scaling Groupに含まれるInstanceが「terminated」になる。
CPU負荷が上昇した時には自動的にAuto ScalingによりInstanceが増えることを確認
CPU負荷が低下したときにもちゃんとterminatedしてくれる。これで余分なお金がかからなくて済む^^;;
しばらくこれで運用してみます。