«前の日記(2013-09-28) 最新 次の日記(2013-10-08)» 編集

ぱぱネット(仮)


2013-10-04 Amazon EC2 AutoScaling & Elastic Load Balancer cheat sheet. [長年日記]

_ [開発][Linux] Amazon EC2 AutoScaling & Elastic Load Balancer cheat sheet.

まえがき

オンプレミス(自社、自宅サーバ)の時代から、 公開Webサービスをやるものにとって、アクセス負荷分散は避けて通れないところです。 こういった負荷分散は、通常ロードバランサで行います。apache2でもnginxでも設定すればできますね。 さらに冗長化も考えるとVRRPを吐くKeepalivedあたりが定番でしょうか。poundなんかも設定が簡単で良いですね。

しかし、オンプレミスで Webサーバの方を負荷に応じて台数を増減するとなると相当敷居の高い 話になります。 サーバの台数をおいそれと増やす訳にはいかず、上限は決まっているわけですから。

でもクラウドなら、サーバの台数もスペックもある程度自由にできます。ポチッとすると5分くらいでサーバは用意されますよね。 いっそ アクセスに応じてサーバの台数を可変してくんないかなー と思いますね。 AWSでこれを実現する仕組みがEC2 AutoScaling & Elastic Load Balancerです。

......ここまでは前置きですが、ネットを調べた感じ、日本語で具体的な手順を記した資料があまりなく、 見つけた講演会かなんかのPPTに書いてあるコマンドラインを打ってもエラーが出てすごい苦労したので、 チートシートにまとめることにしました。

方針は「Web(AWS Console)でできることはそこでする」です(笑)

あと、これ動的サイトの話です。静的なHTMLと画像のみのサイトは、 こんな面倒なことをしなくてもS3とCloudFrontでできます。

AMIの作成

ここはさらっと。

* インスタンスをセーブしてAMIを作成しておく。
* ami-id(ami-XXXXXX、など)をひかえておく。
* ヘルスチェック(正常時必ず200,異常時5xxを返す)ファイルを用意してからセーブすること。
* 起動時にWebサーバが自動起動するようにしておくこと。
* AMIのリージョン(us-west-2、など)を確認しておく。

ELBの作成

ロードバランサー(ELB)の設定をしておく。

* Load Balancer Nameをつける(www2、など)
* Create an internal load balancerのチェックをしない
* Load blaancer Protocolはデフォルト(HTTP:80)のまま
* Security GroupsはAMIのデフォルトで良いでしょう
* Response Timeoutは、該当するCGIがかかる最大秒数を設定(60秒以上は工夫が必要)
* Manually Add Instances to Load Balancerはスキップ

出来上がったらDNS Name(www2-4444444.us-west-2.elb.amazonaws.com、など)と、 Availability Zones(us-west-2a,us-west-2b,us-west-2c、など)を確認しておく。 これらは後々使う。

DNS CNAMEの設定

自分の持っているドメインにELBのDNS Nameを別名(CNAME)で書き込んでおく。 ELBはホストやゾーンを渡り歩くので、AレコードやIPアドレスで指定してはいけない。 私は*.papa.toをもっているので、

IN CNAME www2	www2-4444444.us-west-2.elb.amazonaws.com. (末尾のピリオド.を忘れないこと)

こうしておくと、www2.papa.toは別名でAWSのELBサーバのIPアドレスになるというわけ。 DNSが更新されるまでサイトによっては時間がかかるので、AutoScaling設定前にやっておいた方がよい。

コマンドラインツールのインストールと設定

Webでやる方針なのだが、オートスケーリングだけはツールでしか設定できないので EC2 API Tools(ec2-api-tools.zip)と、Auto Scaling Command Line Tool(AutoScaling-2011-01-01.zip)を 落としてきて、ホームなどで展開し環境変数を整える。私のようにMacOS Xを使っている人はJAVA_HOMEも参考に。

---------.profile--------
export JAVA_HOME=/Library/Java/Home
export AWS_AUTO_SCALING_HOME=/Users/papanda/AutoScaling-1.0.61.3
export EC2_HOME=/Users/papanda/ec2-api-tools-1.6.10.1
export AWS_ACCESS_KEY=AAAAAAAAAAAAAAAA
export AWS_SECRET_KEY=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
export AWS_CREDENTIAL_FILE=/Users/papanda/.autoscaling
export PATH=$PATH:$AWS_AUTO_SCALING_HOME/bin
-------------------------

オートスケーリングツールは環境変数ではなく設定ファイルが必要。これもホームに。

-------.autoscaling----
WSAccessKeyId=AAAAAAAAAAAAAAAA
AWSSecretKey=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-----------------------

オートスケーリングの設定

オートスケーリングの設定を開始する。名前はMyLC。

$ as-create-launch-config MyLC --image-id ami-xxxxx --instance-type t1.micro --region us-west-2

  OK-Created launch config

image-idに起動したいWebサーバのimage-idを設定する。instance-typeはお金次第だが負荷テストを考えるとmicroが良い。

Malformed input-AMI ami-xxxxx is invalid: The image id '[ami-xxxxxx]' does not exist

というエラーが出た場合、先ほどAMIをセーブしたリージョンを設定すること。

オートスケーリンググループを設定する。名前はMyASG。サーバ台数を調整したい場合はmin-size,max-sizeを調整する。

$ as-create-auto-scaling-group MyASG --launch-configuration MyLC \
   --availability-zones=us-west-2a,us-west-2b,us-west-2c \
   --min-size 1 --max-size 10 --load-balancers www2 --region us-west-2

   OK-Created AutoScalingGroup

この時点でインスタンスが起動し始める。起動しなかったらAMI(VPC)の設定などを確認すること。 また、上記のコマンドラインで以下のようなエラーが出た場合はavailability-zonesとload-balancersに間違いがないか確認すること。

as-create-auto-scaling-group:  Malformed input-Launch configuration name not found - null

スケールアップ&ダウンポリシーを設定する。名前はScaleUpとScaleDown(そのまんま)。 どかんと増やしたり減らしたりしたい場合はadjustmentを調整する。

 $ as-put-scaling-policy ScaleUp --auto-scaling-group MyASG --adjustment=1 --type ChangeInCapacity --region us-west-2

   arn:aws:autoscaling:us-west-2:.......
 $ as-execute-policy ScaleUp --auto-scaling-group MyASG --region us-west-2

   OK-Executed Policy
 $ as-put-scaling-policy ScaleDown --auto-scaling-group MyASG --adjustment=-1 --type ChangeInCapacity --region us-west-2

   arn:aws:autoscaling:us-west-2:.......
 $ as-execute-policy ScaleDown --auto-scaling-group MyASG --region us-west-2

   OK-Executed Policy

コマンドライン作業はここまでで終わり。

アラームの設定

オートスケーリングはCloudWatchのアラームと密接に関連している。 CloundWatch(異常検出) --> AutoScalingが受信 --> ポリシーに従いEC2インスタンスを増減、という手順。

Create Alarm Wizardにはいり、メトリクスビューイングで「EC2: Aggregated Auto Scaling Group」を選択し、 該当のオートスケーリンググループ(MyASG)群から、CPUUtilizationなどのメトリクスを選択して作成する。 Define Your Actionsで、Take actionに 「Auto Scaling Policy」を選択し、Auto Scaling Groupに「MyASG」、 Policyに「ScaleUp(またはDown)」を選択 して登録する。これらは当然ポリシーが作成されていなければ選択できないので、 選択肢に現れなければ設定を見直す。

Auto Scaling Policy

あと、当然しきい値などの条件が異なるので、ScaleUpとScaleDownは別々のアラームで作成すること。

Alarmは2つ

オートスケーリングの削除方法

忘れちゃいけないオートスケーリングの消し方。無限に金を取られる。

$ as-delete-auto-scaling-group MyASG --region us-west-2 --force-delete

    Are you sure you want to delete this AutoScalingGroup? [Ny]y
    OK-Deleted AutoScalingGroup
$ as-delete-launch-config MyLC --region us-west-2
    Are you sure you want to delete this launch configuration? [Ny]y
    OK-Deleted launch configuration

多少強引ですが以上です。

次回があれば実際の変動具合を見てみましょう。


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2013年
10月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(+2560143)