Route 53の新機能、DNSファイルオーバーを使うと、運用しているウェブサイトを監視し、サイトがダウンした場合に、訪問者を自動的にバックアップサイトへと誘導することができるようになります。
本日のブログでは、プロダクトマネージャであるSean Meckleyが架空のウェブサイトを例にして、この強力な新機能を使用する方法をお伝えします。
DNSフェイルオーバーとAmazon S3のウェブサイトホスティング機能を組み合わせることで、バックアップウェブサイトをデプロイするためのシンプルで、低コストで、信頼性の高い方法を実現できます。 もちろん、誰も自分のサイトがダウンすることを望んでいませんが、よくないコードのデプロイ、ネットワークの停止などが原因でどうしても停止してしまうことがあります。こういった時のためにバックアップを持つことにより、万一、プライマリーウェブサイトがダウンしても、サイトの訪問者にそれを気づかせず、よい体験を提供することができます。
想像してみてください。あなたはEコマース機能を搭載した企業ウェブサイト、ブログ、もしくは写真共有サイトをAmazon EC2インスタンス上で実行しています。訪問者がログインし、好きな猫の写真を共有できるinternetkitties.comという架空のウェブサイトです。
Route53を利用している場合、そのhosted zoneは次のようになっているでしょう。3つのDNSレコードのみで、非常にシンプルです。hosted zone作成時にデフォルトで作成される2つのレコードと、EC2インスタンスのElastic IPアドレスを指しているinternetkitties.comのAレコードです。

internetkitties.comのメインウェブサイトが停止してしまった時に、サイトへの訪問者がバックアップサイトに誘導されるようDNSフェイルオーバーの設定をしていきましょう。
Route53のコンソールにアクセスし、左のナビゲーションバーのHealth Checksをクリックし、Create Health Checkボタンをクリックします。

Create Health Checkをクリックします。どのウェブページをRoute53がヘルスチェックのターゲットとして扱うかを設定する情報入力画面が開きます。EC2インスタンスのIPアドレス、ポート(ほとんどの場合、ポート80、HTTP経由で提供されるウェブページの標準ポートでしょう。)、サイトのドメイン名、Route53からヘルスチェックをリクエストしたい特定のウェブページ(今回の場合、単に/を指定しています。これはRoute53がヘルスチェックの対象としてサイトのインデックスページを使うことを意味します。)を入力します。入力後、Create Health Checkをクリックして次に進みます。

作成したヘルスチェックがコンソールに表示されます。

hosted zoneのページに戻るために左のナビゲーションからHosted Zonesをクリックします。 そして、internetkitties.com.のAレコードをクリックします。

ページの右側のEdit Record Setで以下の設定を行います。 Now, in the Edit Record Set panel on the right side of the
- TTLを60秒に設定します。この設定は、このDNSレコードがインターネットのDNSシステム内でキャッシュされる時間を制限します。いい換えると、フェイルオーバーが発生した時間とエンドユーザーがバックアップサイトに誘導されはじめる時間の間の遅延を短かくします。
- Routing Policyを“Failover”に設定します。
- Failover Record Typeは“Primary”を選択します。
- Associate Record Set with Health Checkは“Yes”を選択します。
- このレコードに関連づけるヘルスチェックを選択します。表示されるドロップダウンリストに、さきほど作成したヘルスチェックが確認できるはずです。このヘルスチェックを選択します。
- Save Record Setをクリックします。
これ以降、Route53はホームページに定期的にリクエストを送り、正常なレスポンスが返ってくることを確認することにより(具体的には、世界中の複数のロケーションから、それぞれ30秒毎にページをリクエストします。)サイトのヘルスチェックを行うようになります。
次に、Amazon S3でバックアップサイトの設定を行います。Amaozn S3で静的なウェブサイトをホスティングする手順についてはこちらのブログ記事を参考にしてください。 どんなコンテンツを静的なバックアップウェブサイトに配置するかを決定することができます。例えば、親切なメッセージを沿えたイケてる"fail whale"ページ(ソーリーページ)を作成することもできますし、ウェブサイトがダウンしている間も訪問者がリーチできるように、電話番号やEメールアドレスを表示するのもいいかもしれません。
Route53のコンソールに戻り、hosted zoneのページに移動し、Create Record Setをクリックします。 プライマリウェブサイトと同じDNS名を入力します。(今回のケースでは、hosted zoneの名前と同じ、ルートドメイン“internetkitties.com”を使っているので、Route53のコンソールはこれを提案しています。) Aliasのラジオボタンで“Yes”を選択し、エイリアスのターゲットとしてS3ウェブサイトのエンドポイントを選択します。

次にRouting Policyを“Failover”に設定し、failover record typeは“Secondary”を選択します。 残りのチェックボックス(Evaluate Target Health と Associate Record Set with Health Check)はデフォルト設定の“No”のままにしておきます。設定を確認し、Create Record Setをクリックします。

設定完了後のRoute53のhosted zoneの画面は次のようになります。

以上で全ての設定が完了しました。これ以降プライマリサイトはRoute53によってヘルスチェックが行われ、プライマリーサイトが何らかの理由でダウンした場合に、Route53が自動的にS3のバックアップサイトにトラフィックの送信を開始します。
Route53のヘルスチェックはHTTPとTCPレベルのチェックをサポートしており、インスタンス、アベイラビリティゾーン、リージョンレベルの問題を対処するために、レイテンシベースのルーティングおよび、重み付きラウンドロビンと組み合わせて使うこともできます。Route53のヘルスチェックについてのさらに詳しい情報については、Route 53 Developer Guideをご覧ください。
-- Route53 プロダクトマネージャー Sean Meckley