🌟

【AWS】独自ドメインでのWebサイトへのアクセスとSorryページへの誘導

2021/02/15に公開

前回までに、ロードバランサー経由でのWebサーバアクセスができるようになったため、
自分で取得したドメイン名でアクセスできるようになるまでを試してみた。
独自ドメインはお名前.comで取得した。

ロードバランサーの後ろにEC2(Webサーバ)が2台起動している構成。

Sorryページの表示用として、S3バケットを用意しておく。
S3バケットの静的Webサイトホスティングについては、こちらのページを参照ください。

AWSでのDNSサービスはRoute53を使用する。
まず、「ホストゾーン」を作成する。


ホストゾーンを作成すると、以下のような画面になる。
NSレコードの値(複数作成される)を控えておく。

次にお名前.comの管理画面へログインし、該当のドメイン名のネームサーバを、控えておいたRoute 53のDNSサーバへ変更する。

Route 53に戻り、作成したホストゾーンの「レコードを作成」をクリック

ルーティングポリシーを選択する。

今回は通常はロードバランサー経由でテストページを表示し、テストページに障害が発生した際にSorryページを表示させたいため、「フェイルオーバー」を選択して次へ。

(参考)ルーティングポリシーは、以下の6つが用意されている。

シンプルルーティング:従来のDNSと同様。1つのリソースに対しての名前解決を定義する。
加重:複数のルーティング先へそれぞれ重み付けを行い、その割合に従ってトラフィックがルーティングされる。例えば新サービスを公開し、ある割合のユーザーへ限定(段階)的に公開したい場合に使用する。
位置情報:複数リージョンにまたがってサービスを展開している場合に使用する。クライアントから最も遅延が少ないリージョンのサーバへリクエストをルーティングする。
レイテンシー:複数リージョンにまたがってサービスを展開している場合に使用する。クライアントの地域から最も近いサーバへリクエストをルーティングする。地域毎にローカライズされたコンテンツを表示したい場合等に使用。
フェイルオーバー:通常はプライマリへのルーティングを回答するが、障害等でプライマリへのアクセスが不可の場合にセカンダリへのルーティングを回答する。
複数値回答:1つのDNSリクエストに対し、複数の値からランダムに選択された値を返す。

作成するレコードはAレコードを選択する。

フェイルオーバーレコードを定義をクリック。

ルーティング先として、Application Load BalancerとClassic Load Balancerへのエイリアスを指定する。リージョンは、ロードバランサーを作成したリージョンを選択すると、作成したロードバランサーを選択できるようになるので、これを指定する。
フェイルオーバーレコードタイプには、まずルーティングされるべき経路のため、プライマリを指定する。

レコードIDには一意の値を指定する。
ここでは、LB-Pとしている。

同様に、セカンダリレコードとして、SorryページのS3バケットへのルーティングを定義する。


ここまで済んだらようやく動作確認へ。。
Webブラウザを開いて独自ドメイン名でアクセス。テストページが表示された。
(味気ないですが。。)

EC2を停止させて、もう一度独自ドメイン名でアクセス。Sorryページが表示された。

もう一度EC2を起動して、独自ドメイン名でアクセス。再びテストページが表示された。
想定どおりに動作していることを確認できた。

(以下、補足)
最初は、停止後に再度EC2を起動しても元のテストページが表示されず、ここでしばらく詰まってしまった。


EC2は立ち上がっているものの、ターゲットグループのステータスがunhealthyになっている。

AWS Cloud Techのフォーラムにて頂いたアドバイスを参考によくよく調べてみると、
WebサーバのDocumentRootディレクトリに何もファイルが置かれていなかったため、ヘルスチェックに失敗していたようだ。
(ターゲットグループのヘルスチェックパスが"/"の場合は、DocumentRootを意味する。)

そこで、簡単なindex.htmlファイルを置いてリトライしたところ、ヘルスチェックがOKになった。

その後、独自ドメイン名でアクセスすると、テストページが正常に表示されるようになった。

Discussion