目的
ELBで運用しているEC2上のWebサーバーがなんらかの理由でアクセス負荷になりサーバーすべてが切り離されてしまい、その後サービス続行になってしまうような状況が訪れてしまった場合に、自動的にいわゆるSorryPage(「現在サービスに不具合があります」みたいな)を表示することができるようにします。
利用するサービス
- Route53によるDNSフェイルオーバー機能
- ElasticBeanstalk
- EC2
- S3によるWebホスティング
構成
ElasticBeanstalkで構成した以下のような簡単な構成で実験してみます。
ElasticBeanstalkによる環境の構成手順は省略します。
↓
+-----------------------+
| Elastic Load Balancer |
+-----------------------+
↓ ↓
+-----+ +-----+
| EC2 | | EC2 |
+-----+ +-----+
ELBにぶらさがったEC2が両方ともfailしてしまいELBからアクセスを振り分けられなくなる障害を想定します。
準備
Webドメイン
radioboo-example.xyz
というドメインを想定します。
S3静的ウェブホスティング上にSorryページ設置
- S3上にradioboo-example.xyzという名前のバケットを作成します
- Webサイトホスティングを有効化
- 適当なindex.htmlなどを配置しそれをSorryPageとします
-
http://radioboo-example.xyz.s3-website-ap-northeast-1.amazonaws.com/
のようなURLでアクセスできることを確認しておきます。
Route 53の設定
Primaryホストゾーンの設定
以下のようにPrimaryホストゾーンを設定しておきます。
- Nameはアクセスドメインを設定。この場合、
radioboo-example.xyz
を設定します。 - Alias TargetはELBのドメインを指定
- Evaluate Target Healthを"Yes"にしておくことでELBのヘルスチェックと連携してFailoverを実行してくれます。
Secondaryホストゾーンの設定
以下のようにSecondaryホストゾーンを設定しておきます。
- Nameはアクセスドメインを設定。この場合、Primaryと同様に、
radioboo-example.xyz
を設定します。 - Alias TargetはS3で建てたウェブホスティングのドメインを指定
挙動テスト
障害をシミュレート
- 挙動を確認するため、EC2をELBからわざと切り離してみます。EC2のコンソールから主導で切り離してみます。
- しばらく待つとS3から配信しているSorryPageに切り替わりました。
復帰をシミュレート
- 障害からの復帰を想定して、ELBにEC2を主導で復帰させます。
- しばらく待つと勝手にEC2から配信している通常のサービスページに切り替わりました。
以上です。
Route53のfailover機能を使えば、非常に簡単に実装できました。