2015年8月7日金曜日

S3へFailoverさせてソーリーページを表示させる


運用しているとsorry pageを表示させたいという時があると思います。
S3をWebsite Hostingさせていればソーリーページの運用も出来ます。

ソーリーページであればそこまで大きなファイルにならないでしょうし、
静的なものだと思いますので、S3のWebsite Hostingは使い勝手が良くなります。
料金の計算方法やWebsite Hostingのやり方は以下のエントリーをご覧下さい。
"S3でWebページを作る(Website Hosting)"
http://cloudyarouze.blogspot.com/2015/08/s3webwebsite-hosting.html

方法として今回はAWSのRoute53を使用します。
Route53にはFailoverの機能がついている為、この機能を使えば簡単に実装出来ます。

今回は以下のような図を想定しています。



メインで稼動しているのはEC2のインスタンスですが、何かしら障害があった際には、
DNSFailoverでDNSをS3へ向かせるというシナリオになります。
切り替えには1分~3分程度掛かりますので、こちらが許容である必要があります。

今回の設定の前提条件としては、indexに対してヘルスチェックを行って、
コードの200が返ってきている状態で設定しています。
別途ヘルスチェック用のページ等を用意する場合は読み替えて下さい。
また、EC2instanceとS3は既に設定済みの状態で進めます。
ドメインは以下を想定して作成しています。
EC2instance用:test.pc-bto.info
サービス用(Failoverさせるドメイン):failover.pc-bto.info
※通常、静的ウェブホスティングではindex documentにindexファイル、
  error documentにはエラー時のファイルを指定して表示させますが、
  ソーリーページはどのページへリクエストが来ても表示させるようにしたいため、
 S3のWebsite Hostingの設定でerror documentとindex document両方に
  同じファイルを指定します。これでどのようなパスでリクエストが来てもソーリーページが表示されます。


今回のチェックポイントとしては、
1.Route53でヘルスチェックの設定をする
2.Route53でEC2インスタンスのAレコードを設定する
3.Route53でEC2インスタンスのCNAMEレコードをFailover(primary)で設定する
4.Route53でS3のエンドポイントのCNAMEレコードをFailover(secondary)で設定する

CNAMEとAレコードを同名で登録することは出来ません。
S3はAレコードで登録する事は出来ませんので、EC2instance側をCNAMEに合わせる形にします。
従って、EC2instanceは1度Aレコードを登録する必要があります。

それでは、実際にやっていきます。

まずはヘルスチェックを作成します。



  


Nameには適当に名前を入れます。
今回はEC2instance側は1台の想定でやっているため、IPAddressでInstanceのIPを指定。
ELBの場合は、一旦CNAMEで別のドメイン名にした後、Domain Nameで登録することで対応可能。
pathは省略してもindexがあれば問題ありません。
今回は確認を早くしたいので、ルールはちょっと厳しめにしました。
10秒毎(fast)にヘルスチェックを行い、2回失敗したらNGという形にしています。
全部出来たらCreateをクリックして作成します。



追加したルールが表示されていることを確認します。




次にAレコードを登録します。
Hosted ZonesからCreate Record Setでレコード追加していきます。
Nameにはサーバ用のドメインを付けます。
ValueにはEC2instanceのIPを記載し、createボタンでレコードを確定します。




次に実際のサービス用ドメインをCNAMEレコードで登録します。
Nameにはサービス用ドメイン名(Failoverさせたドメイン名)を入力します。
TypeはCNAMEを選択。TTLはフェイルオーバー用のレコードになりますので60にします。
Valueには先ほど登録したAレコードのドメイン名を入力。
RoutingPolicyをFailoverに変更 。
Associate with Health CheckをYesにして、先ほど作成したヘルスチェック名を選択します。
この設定でPrimary側で問題が発生した際に検知できるようになります。




次はFailover先、Secondaryの設定をします。
NameとTypeはPrimaryと一緒です。
TTLを60秒にしてValueにはs3のエンドポイントを指定します。
Routing PolicyにFailoverを指定して、Secondaryにチェックを入れます。
SecondaryにはHealth Checkは不要です。この状態でCreateします。



これでS3へのフェイルオーバーの設定が完了しました。






切り替えの時間がそこまでタイトでなければ、良い方法ではないでしょうか。




それでは、よいクラウド構築を。

0 件のコメント:

コメントを投稿