2009/05/25 (Mon)
■[AWS][Server] Amazon EC2 新機能 Monitoring, Auto Scaling and Elastic Load Balancing を一通り触ってみた

5/18に Amazon AWS から発表になった Amazon EC2 の新機能は Auto Scaling や Load Blanacing など、今までユーザ側でなんとかしていた or 提供事業者が飯の種にしていた部分に Amazon がカバーしてしまった。と言う点で結構注目が集まっていた。
細かな点はさておき、ひとまず触ってみないことにはどこまでカバーされているかも分からないので触ってみた。以下、触ってみたときのメモ。
事前情報
設定の仕方やコマンドはそれぞれのページを参考にした。
3機能概要
- CloudWatch は instance と Elastic Load Balancer 両方のモニタリングが行える
- それぞれ取得できるパラメータは異なる
- Auto Scaling が動作するためには、CloudWatch が instance 上で有効になっていることが条件
- Elastic Load Balancing は起動している instance を指定して分散対象に加えることができる
- beta版ということで、すべてコマンドラインでの操作方法しか提供されていない
- Elasticfox 上だと今回の機能に対する情報は見えない
動作環境
事前準備
- Amazon AWS web へログイン
- Amazon EC2 API Tools をダウンロードして、ローカルにて解凍
- EC2 コマンドへの PATH が通っている既存ディレクトリと置き換える
- 今回の3機能追加にともなうもろもろのコマンドが増えている
CloudWatch を触る
事前準備
README.TXT をみつつ
- Amazon CloudWatch API Tools をダウンロードローカルに配置
- .bash_profile に PATH を追加
- credential-file-path.template をコピーして好きな名前に変える
- 今回は credential-file とした
- このファイルに必要な情報を書く
- .bash_profile に追記した中身
export AWS_CLOUDWATCH_HOME=~/Dropbox/AmazonAWS/CloudWatch export PATH=$PATH:$AWS_CLOUDWATCH_HOME/bin export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credential-file
- 以下の記述があらかじめ入っていること
export EC2_PRIVATE_KEY=$EC2_HOME/pk-****.pem export EC2_CERT=$EC2_HOME/cert-****.pem
- 確認 mon-** コマンドが実行できるようになっていること
動かしてみる
- EC2 の instance を起動する時に CloudWatch のモニターを有効にする
$ ec2-monitor-instances i-***
を実行する
- EC2 instance 用
- CPUUtilization
DiskReadBytes
DiskReadOps
DiskWriteBytes
DiskWriteOps
NetworkIn
NetworkOut - Elastic Load Balancer 用
- HealthyHostCount
Latency
RequestCount
UnHealthyHostCount
- stats を見るコマンド mon-get-stats
$ mon-get-stats -help SYNOPSIS mon-get-stats MeasureName --statistics value[,value...] [--dimensions "key1=value1,key2=value2..." ] [--end-time value ] [--namespace value ] [--period value ] [--start-time value ] [--unit value ] [General Options]
何が必須なのかが分かりづらいのと、key とか value に何を入れるかが説明不足。。。
$ mon-get-stats CPUUtilization --start-time 2009-05-22T15:00:00+09:00 --end-time 2009-05-22T15:30:00+09:00 --period 60 --statistics "Average,Minimum,Maximum" --namespace "AWS/EC2" --dimensions "InstanceId=i-1183c678" 2009-05-22 06:00:00 1.0 0 0.0 4.9E-324 Percent 2009-05-22 06:01:00 1.0 0.38 0.38 0.38 Percent 2009-05-22 06:02:00 1.0 0 0.0 4.9E-324 Percent
- Elastic Load Balancer の RequestCount をみるコマンド
$ mon-get-stats RequestCount --namespace "AWS/ELB" --statistics "Average,Minimum,Maximum" --start-time 2009-05-25T12:00:00+09:00 --end-time 2009-05-25T13:30:00+09:00 2009-05-25 03:00:00 3.0 1 1.0 1.0 Count 2009-05-25 03:01:00 3.0 1 1.0 1.0 Count 2009-05-25 03:02:00 6.0 1 1.0 1.0 Count 2009-05-25 04:05:00 3.0 1 1.0 1.0 Count
出力結果の数値はこの場合 Samples, Average, Minimum, Maximum のようだ
auto scaling を触る
準備
動かしてみる
- 1) as-create-launch-config : スケールアウトする時(増やす際)にどの AMI を増やして行くのかあらかじめ指定する
- 2) as-create-auto-scaling-group : 先に設定した launch-config を group に設定する
$ as-create-auto-scaling-group test-group1 --launch-configuration 1test --availability-zones us-east-1a --min-size 0 --max-size 2
$ as-create-or-update-trigger test-trigger2 --auto-scaling-group test-group1 --namespace "AWS/EC2" --measure CPUUtilization --statistic Average --dimensions "AutoScalingGroupName=test-group01" --period 60 --lower-threshold 20 --lower-breach-increment=-1 --upper-breach-increment 1 --upper-threshold 80 --breach-duration 120
- 応用編 : auto-scaling group で min-size 1 にした場合
$ as-terminate-instance-in-auto-scaling-group i-**** --decrement-desired-capacity
を実行すると指定したサイズに関係なく落ちてくれるので、自動起動はなくなる
load blancer を触る
準備
動かしてみる
SYNOPSIS elb-create-lb LoadBalancerName --availability-zones value[,value...] --listener "protocol=value, lb-port=value, instance-port=value" [ --listener "protocol=value, lb-port=value, instance-port=value" ...] [General Options]
$ elb-create-lb test-lb4 --availability-zones us-east-1a --listener "lb-port=80,instance-port=80,protocol=http" DNS-NAME test-lb4-1200388198.us-east-1.elb.amazonaws.com
$ host test-lb4-1200388198.us-east-1.elb.amazonaws.com test-lb4-1200388198.us-east-1.elb.amazonaws.com has address 174.129.197.180
- 2) elb-register-instances-with-lb : 作った ELB に instance を登録する
$ elb-register-instances-with-lb test-lb4 --instances i-fb155392,i-ff155396,i-f315539a INSTANCE-ID i-fb155392 INSTANCE-ID i-ff155396 INSTANCE-ID i-f315539a
- 3) Load Balancer は分散対象となる instance の health check を行っているので、確認
- Load Balancer 名 test-lb4 での health check 結果
$ elb-describe-instance-health test-lb4 INSTANCE-ID i-fb155392 InService INSTANCE-ID i-ff155396 InService INSTANCE-ID i-f315539a InService
- instance が生きていれば InService、死んでいれば OutService となる
- instance を登録した時点で、デフォルトで何がしかのチェックが行われている。設定内容は不明
- 4) さらにオリジナルの health check設定を入れてみる
$ elb-configure-healthcheck test-lb4 --target "TCP:80" --interval 5 --timeout 3 --unhealthy-threshold 2 --healthy-threshold 2 HEALTH-CHECK TCP:80 5 3 2 2 $ elb-describe-instance-health test-lb4 INSTANCE-ID i-fb155392 InService INSTANCE-ID i-ff155396 InService INSTANCE-ID i-f315539a InService
これにて確認終了。
ちょっとはまったこと
- Load Balancer から instance への health check する際には、instance に適用している sercurity group(firewall) にて source CIDR に
0.0.0.0/0(any)ヘルスチェックしてくる source IP address が設定されていること - health check packet がはじかれてしまい、OutService 扱いになってしまうため
- Load Balancer と instance に割り当てられていたグローバルアドレスより 174.129.197.0/24 を設定しても NG だったことから、異なる interface から通信していて、Amaozn EC2 内であってもすべて Security Group が適用されていると思われる
- => 任意のローカルアドレスからチェックされていることが分かった。tcpdump などしてアドレスを特定して security group に追加すれば広く設定する必要はない( Amazon EC2 Elastic Load Balancing をもう少し詳しく見てみた - つれづれなる・・・
より)
気になったこと
- 直接 instance に割り当てられた FQDN にブラウザからアクセスしてもみれる
- Load Balancer に割り当てられた FQDN にブラウザからアクセスしてもみれる
- instance のデフォルトゲートウエイが変わっていないことから、Load Balancer の動作は route 方式でなくて、おそらく NAT 方式なのだろう
全体通して分かったこと
( Amazon EC2 Auto Scaling をもう少し詳しく見てみた - つれづれなる・・・より、正しくない部分を修正)
auto scaling と Load Balancer の連携は 今のところできてないようだ 可能
- 自動的に auto scaling から Load Balancer へ instance-ID 情報を渡すコマンドなりは
見つけられなかった--load-balancers オプションを用いる -
Load Balancer の分散対象を設定するときはあらかじめ起動してある instance-ID を指定するので、auto scaling が立ち上げた instance-ID は手動で設定する必要がある -
Load Balancer 配下への追加は手動になるので、Load Balancer を使うケースは auto scale のメリットが発揮できない -
これができると web のフロントエンドの負荷分散を自動的にできて、auto scaling のメリットがでるが今回の機能追加ではカバーできていない - 今回の機能追加 auto scaling は instance が落ちてしまった際、自動的に起動できる対障害性のアップにはなりそう
Amazon EC2 が制御できる範囲はあくまでネットワーク〜電源 ON/OFF まで
コメントを書く
トラックバック - http://d.hatena.ne.jp/d_sea/20090525/p1
リンク元
- 113 http://www.google.co.jp/search?q=ec2+(autoscaling+OR+autoscale)+collectd&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 39 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4DAJP_jaJP269JP270&q=バックアップシェル
- 38 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=BO&q=EC2+security+group+設定&btnG=検索&lr=lang_ja
- 34 http://cloud.manabing.jp/cloud-news/amazonec2monitoringautoscalingandelasticoadbalancing.html
- 16 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=gpq&q=SRT100+VPN&revid=1370133931&ei=s1oaSrrGGNOUkAX3nUw&sa=X&oi=revisions_inline&resnum=0&ct=top-revision&cd=5
- 15 http://www.google.co.jp/search?q=L705iX&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=ec2 auto scaling&source=web&cd=2&ved=0CDAQFjAB&url=http://d.hatena.ne.jp/d_sea/20090525/p1&ei=MHPPTqniOa7HmQWD_-DfDQ&usg=AFQjCNGf3W-SA1nqQFJNLtOQLD0xfjw5tg
- 14 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBwQFjAA&url=http://d.hatena.ne.jp/d_sea/20090525/p1&rct=j&q=mon-get-stats &ei=0LVoTfHpOYTmvQOs8fnjAg&usg=AFQjCNGf3W-SA1nqQFJNLtOQLD0xfjw5tg&sig2=B1M4oGdICiHdKeSA6SLdpw
- 13 http://www.google.co.jp/reader/view/
- 13 http://www.google.co.jp/url?sa=t&rct=j&q=elb-create-lb&source=web&cd=1&ved=0CCwQFjAA&url=http://d.hatena.ne.jp/d_sea/20090525/p1&ei=JRWgTr6LFoPamAW-t8HcBA&usg=AFQjCNGf3W-SA1nqQFJNLtOQLD0xfjw5tg







