はじめの一歩!無料で始めるAWS その3(ELB、CloudFront編)

スポンサーリンク

前回まででEC2とWebサーバ+αの設定が終わりました。
今回はロードバランサーのELB、CDNのCloudFrontを設定します。

スポンサーリンク
スポンサーリンク

Elastic Load Balancing(ELB)って?

ロードバランサーです。外からのトラフィックを良い感じに分配してくれたり、サーバの一台が落ちても良い感じに他にまわしてくれたりします。

サーバが2台あれば、負荷分散、冗長化などELBを使う意味もあるのですが、現在の1台構成(無料枠)でELBを使うメリットは… 凄くサーバ負荷がかかったときに無料枠内で2台のEC2を起動したり、ELBにつくパブリックDNS名は再起動しても変わらないので、EC2の再起動が怖くない(ElasticIPつければいいだけですが)… くらいなのかなぁ。勉強の為にやってみました。

ELBの設定

EC2→ネットワーク&セキュリティ→ロードバランサー→ロードバランサーの作成

elb02

ロードバランサーの定義

プロトコルは今回80しかないので、それで。
利用可能なサブネットをクリックし、192.168.1.0/24のサブネットを選択→次の手段

elb03

セキュリティグループの割り当て

新しいセキュリティグループ→名前:適当(lb-web)、プロトコル:HTTP、送信元:任意の場所
→次の手順

elb04

ヘルスチェックの設定

pingパス:/check.html
(EC2のhttpdで設定したチェック用のhtmlの場所)
→次の手順

elb06

ここでは/だけど、実際にはEC2編の最後に作ったファイルを1欄へ

EC2インスタンスの追加

どのEC2インスタンスをロードバランサーで制御するかを選択する
上記で作ったEC2を選択し、次の手段へ

elb07

タグ名の設定

キー:Name 値:任意(elb-web)

確認

設定を確認して作る

起動確認

起動直後はヘルスチェックが行われて居らずステータスがオレンジや赤色になっているが、数分ほっておくと、緑に変わる。緑に変わらなければ、ヘルスチェックが間違っていたりするので設定を見直す(中身が0バイトのファイルだとダメだった)。

緑に変わったら、DNS名を控え、ブラウザでアクセスしてみて、想定したWebページが出るかどうかを確認する。

elb08

DNS名でテストを行う

独自ドメインを割り当てる場合は、”独自ドメイン名 CNAME ELBのDNS名” みたいな感じでDNSのCNAMEの設定をします。再起動や負荷によって増減/変更するらしいELBのIPアドレスをAレコードとかで指定しちゃダメ。

左のネットワークインタフェースを見ると負荷が無くても2つのグローバルIPが割り当てられているのが分かります。

elb09

負荷にあわせてIPアドレスが自動的に増減するらしい

CloudFrontって?

CloudFrontはコンテンツデリバリネットワーク(CDN)とか言う、全世界にあるコンテンツ用キャッシュサーバみたいなもの。ELBと同じく、設定するとホスト名が付くので、ドメイン名 CNAME DNS名と設定すると使えます。

CloudFrontの設定

ストレージ & コンテンツ配信→CloudFrontを選択→Create Distributionを押します。

Web→Get Startedを選択します。

Origin Settingsで、前回設定したELBを選択。

Webサーバで名前ベースのバーチャルホストを使っている場合はHOSTヘッダーを転送させます。

2015-06-23_17h34_12

バーチャルホストを使ってる場合は、Hostヘッダを転送させる

作成後表示される、DNS名にアクセスして、ELB配下のサーバにアクセスできることを確認します(バーチャルホストを使用している場合は、DNSサーバのCNAMEでこれに割り当てます)

ただ、上記の設定だと全てキャッシュされてしまいます。本文がキャッシュされると、ちょっと間違えて変更したいときに直ぐに反映されないため、画像のみCDNを使う設定にしました。結果を先に言うと、想定している形ではできませんでした。

画像のみをCloudFrontで配信


.htaccess
# for amazon Cloud Front
RewriteCond %{HTTP_HOST} ^hoge\.example\.com$
RewriteCond %{HTTP_USER_AGENT} !^Amazon\ CloudFront$
RewriteRule ^(.*)\.(png|jpg)$ http://XXXXXXXXXXXXX.cloudfront.net/$1.$2 [NE,R=302,L]

確かにこれで、画像のリクエストが(毎回)EC2まで届いて、mod_rewriteの機能でpngとjpgは2回目以降CloudFrontで配信されました。

ただ、今回やりたかったのは若干 特殊なのですが次の形。

  • WordPressマルチサイト(apacheバーチャルホスト) + 画像のみCloudFrontで配信

WordPressのマルチサイトでは、画像も含めhostヘッダーを見て、内部的に振り分けているようなのですが、上記の形でXXXXXXXXXXXXX.cloudfront.netに飛ばしてしまうと、hostヘッダが書き換わってしまい、正常に動作しません。

「スイス製のアーミーナイフ」mod_rewriteならきっと良い方法があるような気はするのですが、やり方が分かりませんでした。こんな風にしては?等ありましたら教えてください。

 

次は最後。RDSを設定します。

 

・はじめの一歩!無料で始めるAWS

  1. 登録、請求アラート、用語編
  2. EC2、EBS編
  3. ELB、CloudFront編
  4. RDS、CloudWatch、退会編

コメント

タイトルとURLをコピーしました