okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

VPC内でのPublicIP自動割り当てをAuto Scalingから使う

こんにちは@oko_changです。
少し前に自分で作成したVPC内にEC2インスタンスを起動する時に、PublicIPを自動で割り当て出来るようになりました。
前回のアップデートでは、Auto Scalingで使用する事は出来ませんでしたが、今回アップデートされた内容でAuto Scalingにも対応されたようです。
というわけでちょっと動作確認してみました。

環境

$ as-version 
Amazon AutoScaling CLI version 1.0.61.3 (API 2011-01-01)

手順

public IP address associationに対応したAuto Scaling Command Line Toolをダウンロードしてセットアップします。
セットアップ方法は以前まとめているエントリが参考になると思います。

$ cd ~/src/
$ unzip AutoScaling-2011-01-01.zip 
$ mv ./AutoScaling-1.0.61.3 ~/bin/
$ cd ~
$ ln -s /Users/yanase/bin/AutoScaling-1.0.61.3 ./bin/AutoScaling

Launch Configurationを作成するときに以下のようにassociate-public-ip-addressオプションをtrueにするだけなので簡単です。
※以下の例では起動するインスタンスにスポットインスタンスを使っています。

$ as-create-launch-config okochang-lc \
--image-id ami-0756c506 \
--instance-type m1.small \
--key okochang-key \
--group sg-b72d31db \
--spot-price 0.020 \
--associate-public-ip-address true

あとはいつも通りの手順でAuto Scaling Groupを作ります。

$ as-create-auto-scaling-group okochang-asg \
--launch-configuration okochang-lc \
--vpc-zone-identifier subnet-04c5a56d,subnet-b69af6df \
--min-size 2 \
--max-size 4 \
--grace-period 300 \
--default-cooldown 600 \
--load-balancers okochang-lb \
--health-check-type ELB

スケールアウトのポリシーとアラームを作ります。

$ as-put-scaling-policy okochang-scaleout-policy \
--auto-scaling-group okochang-asg \
--type ChangeInCapacity \
--adjustment=2 \
--cooldown 600

$ mon-put-metric-alarm okochang-scaleout-alarm \
--period 300 \
--dimensions "AutoScalingGroupName=okochang-asg" \
--namespace "AWS/EC2" \
--metric-name CPUUtilization \
--evaluation-periods 1 \
--statistic Average \
--threshold 70 \
--comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:autoscaling:ap-northeast-1:111150034499:scalingPolicy:xxxxxxxx-ba15-4652-83eb-6caa1d31f21f:autoScalingGroupName/okochang-asg:policyName/okochang-scaleout-policy

スケールインのポリシーとアラームを作ります。

$ as-put-scaling-policy okochang-scalein-policy \
--auto-scaling-group okochang-asg \
--type ChangeInCapacity \
--adjustment=-2 \
--cooldown 600

$ mon-put-metric-alarm okochang-scalein-alarm \
--period 300 \
--dimensions "AutoScalingGroupName=okochang-asg" \
--namespace "AWS/EC2" \
--metric-name CPUUtilization \
--evaluation-periods 1 \
--statistic Average \
--threshold 30 \
--comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:autoscaling:ap-northeast-1:111150034499:scalingPolicy:yyyyyyyy-1d8b-4aae-82c9-62cb1a6006b2:autoScalingGroupName/okochang-asg:policyName/okochang-scalein-policy

インスタンス起動後、きちんとPublicIPが割り当てられているか確認しておきます。

$ as-describe-auto-scaling-instances 
INSTANCE  i-2985212c  okochang-asg  ap-northeast-1b  InService  HEALTHY  okochang-lc
INSTANCE  i-3f6bad3a  okochang-asg  ap-northeast-1c  InService  HEALTHY  okochang-lc

$ ec2-describe-instances i-2985212c
RESERVATION     r-0931300c      975450034499
INSTANCE        i-2985212c      ami-0756c506                    running okochang-key  0               m1.small        2013-09-23T01:57:03+0000        ap-northeast-1b aki-44992845                    monitoring-enabled      54.238.138.167  10.0.3.6        vpc-0fc5a566    subnet-b69af6df ebs     spot    sir-e407b05b   paravirtual      xen     78980db0-8331-4748-a78d-8d0b860dd01a    sg-b72d31db     default false
BLOCKDEVICE     /dev/sda1       vol-cb09e09d    2013-09-23T01:57:07.000Z        true
NIC     eni-8ca4e5e4    subnet-b69af6df vpc-0fc5a566    975450034499    in-use  10.0.3.6                true
NICATTACHMENT   eni-attach-ea5558ef     0       attached        2013-09-23T10:57:03+0900        true
NICASSOCIATION  54.238.138.167  amazon  10.0.3.6
GROUP   sg-b72d31db     okochang-sg
PRIVATEIPADDRESS        10.0.3.6
TAG     instance        i-2985212c      aws:autoscaling:groupName       okochang-asg

$ ec2-describe-instances i-3f6bad3a
RESERVATION     r-4aa78b4f      975450034499
INSTANCE        i-3f6bad3a      ami-0756c506                    running okochang-key  0               m1.small        2013-09-23T01:57:03+0000        ap-northeast-1c aki-44992845                    monitoring-enabled      54.238.137.225  10.0.1.9        vpc-0fc5a566    subnet-04c5a56d ebs     spot    sir-d7b8225c   paravirtual      xen     ba4ed411-6d1c-44f1-8bbe-006e22a8eb89    sg-b72d31db     default false
BLOCKDEVICE     /dev/sda1       vol-dc6bba8a    2013-09-23T01:57:07.000Z        true
NIC     eni-8da4e5e5    subnet-04c5a56d vpc-0fc5a566    975450034499    in-use  10.0.1.9                true
NICATTACHMENT   eni-attach-6fc9ad6a     0       attached        2013-09-23T10:57:03+0900        true
NICASSOCIATION  54.238.137.225  amazon  10.0.1.9
GROUP   sg-b72d31db     okochang-sg
PRIVATEIPADDRESS        10.0.1.9
TAG     instance        i-3f6bad3a      aws:autoscaling:groupName       okochang-asg

どちらのインスタンスもしっかり割り当てられています。

まとめ

オプションがひとつ増えるだけなので、簡単に使うことが出来ますね。