【AWS】WordPress設置でロードバランサがOut of Serviceになってハマった件
インフラ系は勉強中、且つ最初からAWSを使用して楽してしまっている私ですが先日ロードバランサがOut of Serviceから抜け出せなくハマってしまったので、参考になるか分かりませんがその現象と対応などを書いていきたいと思います。
プログラミングやWordPressを習得するのに一番近道な方法とは?
目次
やりたかったこと
- お名前.comでドメイン取得
- サーバはAWSを使用してWordPress設置
- WordPressのURLにドメイン紐付ける
これだけ。
サササっと終えて違う仕事を進めよう!と思っていたのですが、お恥ずかしい話めちゃくちゃハマってしまいました。
AWSの構成
AWSの構成は取り急ぎ一番簡素な形で。
WordPressとAWSのコンビと言えば網元さんが有名ですが、やっぱ自分でやりたいので使いませんでした。
- ロードバランサ 1台
- EC2 1台 (apache使用)
- RDS 1台
バーチャルホストの設定
上記の構成をひとまず作り終えて、ロードバランサとEC2を紐付け完了。
ドメインとロードバランサのpublicDNSの設定も完了。
次はバーチャルホストの設定にいきます。
今回のドメインを設定するドキュメントルートはwordpressのサブディレクトリを切り、下記のような形にする予定でした。
■ドキュメントルート
1 | /var/www/html/wordpress |
現状WordPress以外に使用する予定がなかったのでバーチャルホストにするか、デフォルトのドキュメントルートを変えるか、のどっちかだと思うのですがこういう時はどっちにするのが正解なのでしょうか??
良く分からなかったので、バーチャルホストで設定しました。
■ httpd.conf
[code]
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin system@xxxx.co.jp
DocumentRoot /var/www/html/wordpress
ServerName www.xxxxx.net
ErrorLog logs/xxxxx.net-error_log
CustomLog logs/xxxxx.net-access_log common
</VirtualHost>
[/code]
■ Apache再起動
[code]service httpd restart[/code]
突然画面が真っ白に…
バーチャルホストも設定して無事ドメインをブラウザで叩くとWordPressが表示されました。
もうそろそろ終わりだなーと思っていたら、突然画面が真っ白に……
「どういうこっちゃ…」
意味が分からん。
急になんで白くなるんだ。
EC2のpublicDNSでアクセスしてみるとしっかりWordPressが表示された。
「ん?これはロードバランサがおかしい?」
AWSの管理画面でロードバランサを確認してみると、、、
「Out Of Serviceになってる!」
いつの間にか切り離されてしまっていたのです。
ロードバランサの注意点
なぜ突然EC2が切り離されてしまったかというと、AWSのロードバランサの親切設計によるものでした。
AWSのロードバランサは「Health Check」という『指定された時間(デフォルトは30秒)毎にEC2が問題がないかを確認し、何か問題があったら自動的に問題があるEC2をロードバランサから切り離す』親切機能があります。
どのように問題があるか確認するかというと、ロードバランサの下記で設定してあるファイルにアクセス出来なくなった場合に自動的に切り離されるようになっています。
ロードバランサを作る時にファイル名やパスを設定できるのですが、あまり深く考えずにそのままの設定で作っちゃいました。
さて、今回なぜ突然真っ白になってしまったかというと、この「Health Check」が/var/www/html/wordpressディレクトリにindex.htmlなんかないよ!と正常に作動したからです。
サブディレクトリを切るためにバーチャルホストでドキュメントルートを/var/www/html/wordpressに変更しちゃいましたから。
元々WordPress本体にindex.htmlなんてないですからね。index.phpですからね。
ですので、対応としてはロードバランサの「Health Check」のファイル名をindex.phpに変更するか、WordPressディレクトリにとりあえずindex.htmlを置くかになります。
ただ一度Out of Serviceになったらそれだけでは終わりません。
Health Checkは自動で戻してくれない
30秒毎にHealth CheckするんだからEC2が正常に戻ったら自動的にまた紐付けてくれるかと思っていたのですが、戻ってくれませんでした…
勝手に戻してくれても良いんですけどね。
そういう仕様っぽいです。
一度Out of Serviceになった場合は、再度紐付け直すしかないようです。
■ 再度EC2をロードバランサに追加
これでやっと「in Service」に戻りました汗
まとめ
AWSのロードバランサを使用する際は「Health Check」機能に注意しよう!
ロードバランサを触ったのはAWSが初めてな私だけが引っかかることなのかも知れませんが、もし誰かのお役に立てれば嬉しいかぎりです。