見出し画像

Route53のヘルスチェック機能を使い、通常時はEC2に、障害発生時はS3のsorryページを表示させる

こんにちは!さっしです!

普段は問題なく稼働しているEC2やELBですが、不意な障害発生時はユーザに何らかの障害が発生していることを表す「sorryページ」を表示させられたら親切ですよね。

今回は主にS3とRoute53を使い、そんな状況にも対応できる設定をご紹介します。

■完成図

画像1

■やりたいこと

・HTMLファイルをアップしたらブラウザから表示されるように、S3を静的ウェブサイトとして活用したい
・Route53のヘルスチェックを使い、通常時はEC2を読みに行き、障害発生時はS3にアップされているsorryページを表示させたい

■事前準備

・以下の構成を基に設定をしていきます

画像2

※詳細な設定方法は以下のブログの「4」までを参考にしてください
AWSのLAMP環境で2つのアベイラビリティゾーンにまたがった冗長化構成のEC2とRDSを作成して耐障害性を高めたい

■やること

1.障害発生時に表示させるsorryページを作成し、S3にアップロードする
2.S3を静的ウェブサイトとしてブラウザからアクセスできるようにする
3.Route53のロードバランサーのレコードにプライマリのフェイルオーバールーティングの設定をする
4.Route53のS3のレコードにセカンダリのフェイルオーバールーティングの設定をする
5.フェイルオーバールーティングの動作確認をする


■1.障害発生時に表示させるsorryページを作成し、S3にアップロードする

・障害発生時に表示させるためのindex.htmlを作成する

<!DOCTYPE html>
<p>sorry page</p>
</html>


・ナビゲーションペインの「バケット」をクリック後、右上の「バケットを作成」ボタンをクリックする
使用サービス:S3

画像3

・以下の内容を入力し「バケットを作成」ボタンをクリックする
バケット名:バケット名はドメイン名(今回はsitetasting.ml)と同じにする必要がある
リージョン:VPCと同じリージョン
パブリックアクセスをすべて ブロック:チェクを外す
現在の設定により、このバケットとバケット内のオブジェクトがパブリックになる可能性があることを承認します。:チェックする

画像4

画像5

画像6

画像7

・ナビゲーションペインの「バケット」をクリック後、先ほど作成したバケットの「名前(今回はsitetasting.ml)」をクリックする

画像8

・「アップロード」ボタンをクリックする

画像9

・「ファイルの追加」ボタンをクリックし、先ほど作成したindex.htmlアップロード後、「アップロード」ボタンをクリックする

画像10

画像11

・「アップロード」ボタンをクリックする

■2.S3を静的ウェブサイトとしてブラウザからアクセスできるようにする

使用サービス:S3
・ナビゲーションペインの「バケット」をクリック後、先ほど作成したバケットの「名前(今回はsitetasting.ml)」をクリックする

画像12

・「プロパティ」タブをクリック後、静的ウェブサイトホスティングの「編集する」ボタンをクリックする

画像13

画像14

・以下の内容を入力し「変更の保存」ボタンをクリックする
静的ウェブサイトホスティング:有効にする
インデックスドキュメント:index.html

画像15

画像16

・「アクセス許可」タブをクリック後、バケットポリシーの「編集する」ボタンをクリックする

画像17

・以下の内容を入力し「次へ」ボタンをクリックする
ポリシー:

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "PublicReadGetObject",
           "Effect": "Allow",
           "Principal": "*",
           "Action": [
               "s3:GetObject"
           ],
           "Resource": [
               "arn:aws:s3:::sitetasting.ml/*"
           ]
       }
   ]
}

※「"arn:aws:s3:::sitetasting.ml/*"」のドメインはご自身が取得したドメインを入力する

画像18

画像19

・「プロパティ」タブをクリック後、バケットウェブサイトエンドポイントに表示されている「URL」をクリックする

画像20

画像21

・index.htmlの中身が表示されていることを確認する

画像22

■3.Route53のロードバランサーのレコードにプライマリのフェイルオーバールーティングの設定をする

使用サービス:Route53
・ナビゲーションペインの「ホストゾーン」をクリック後、設定をしたい「ドメイン名(今回はsitetasting.ml)」をクリックする

画像23

・「ロードバランサー」のレコードにチェックをし「編集」ボタンをクリックする

画像24

・以下の内容を入力し「変更を保存」ボタンをクリックする
ルーティングポリシー:フェイルオーバー
フェイルオーバーレコードタイプ:プライマリ
レコードID:任意

画像25

画像26

■4.Route53のS3のレコードにセカンダリのフェイルオーバールーティングの設定をする

使用サービス:S3
・sitetasting.mlのホストゾーンで「レコードを作成」ボタンをクリックする

画像27

・以下の内容を入力し「次へ」ボタンをクリックする
ルーティングポリシー:フェイルオーバー

画像28

・以下の内容を入力する
TTL (秒):60

画像29

○Tips
・TTL:DNSのキャッシュを何秒間保持するのかという設定。たとえプライマリが復旧しても、設定時間中はキャッシュにより、セカンダリの情報を表示させる
・TTLの秒数を短すぎる値にした時の問題点
https://ja.stackoverflow.com/questions/54877/dns-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE-ttl-%E3%82%92%E7%9F%AD%E3%81%8F%E3%81%97%E3%81%99%E3%81%8E%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AE%E5%BC%8A%E5%AE%B3%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B

・「フェイルオーバーレコードを定義」ボタンをクリックする

画像30

・以下の内容を入力し「フェイルオーバーレコード定義」ボタンをクリックする
値/トラフィックのルーティング先
エンドポイントを選択:S3ウェブサイトエンドポイントへのエイリアス
リージョンを選択:先ほど作成したバケットがあるリージョン
S3バケットを選択:先ほど作成したバケット名
※ここでバケット名が自動表示されない場合は、バケット名とドメイン名が一致していない可能性がある
フェイルオーバーレコードタイプ:セカンダリ
レコードID:任意

画像31

画像32

・「レコードを作成」ボタンをクリックする

画像33

■5.フェイルオーバールーティングの動作確認をする

・EC2のリソースが問題なく表示されることをブラウザでアクセスし確認する

画像34

・プライマリの障害発生を仮定してEC2インスタンスを停止し、セカンダリへの切り替わりをブラウザでアクセスし確認する

画像35

画像36

○Tips
TTLの設定時間より前にアクセスした場合は503エラー画面が表示される

・プライマリの復旧を仮定してEC2インスタンスを起動し、セカンダリからプライマリへの切り替わりをブラウザでアクセスし確認する

画像37


設定は以上になります。

AWSってほんと楽しいですね!

この記事が気に入ったらサポートをしてみませんか?