Route53のヘルスチェック機能を使い、通常時はEC2に、障害発生時はS3のsorryページを表示させる
こんにちは!さっしです!
普段は問題なく稼働しているEC2やELBですが、不意な障害発生時はユーザに何らかの障害が発生していることを表す「sorryページ」を表示させられたら親切ですよね。
今回は主にS3とRoute53を使い、そんな状況にも対応できる設定をご紹介します。
■完成図
■やりたいこと
・HTMLファイルをアップしたらブラウザから表示されるように、S3を静的ウェブサイトとして活用したい
・Route53のヘルスチェックを使い、通常時はEC2を読みに行き、障害発生時はS3にアップされているsorryページを表示させたい
■事前準備
・以下の構成を基に設定をしていきます
※詳細な設定方法は以下のブログの「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
・以下の内容を入力し「バケットを作成」ボタンをクリックする
バケット名:バケット名はドメイン名(今回はsitetasting.ml)と同じにする必要がある
リージョン:VPCと同じリージョン
パブリックアクセスをすべて ブロック:チェクを外す
現在の設定により、このバケットとバケット内のオブジェクトがパブリックになる可能性があることを承認します。:チェックする
・ナビゲーションペインの「バケット」をクリック後、先ほど作成したバケットの「名前(今回はsitetasting.ml)」をクリックする
・「アップロード」ボタンをクリックする
・「ファイルの追加」ボタンをクリックし、先ほど作成したindex.htmlアップロード後、「アップロード」ボタンをクリックする
・「アップロード」ボタンをクリックする
■2.S3を静的ウェブサイトとしてブラウザからアクセスできるようにする
使用サービス:S3
・ナビゲーションペインの「バケット」をクリック後、先ほど作成したバケットの「名前(今回はsitetasting.ml)」をクリックする
・「プロパティ」タブをクリック後、静的ウェブサイトホスティングの「編集する」ボタンをクリックする
・以下の内容を入力し「変更の保存」ボタンをクリックする
静的ウェブサイトホスティング:有効にする
インデックスドキュメント:index.html
・「アクセス許可」タブをクリック後、バケットポリシーの「編集する」ボタンをクリックする
・以下の内容を入力し「次へ」ボタンをクリックする
ポリシー:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::sitetasting.ml/*"
]
}
]
}
※「"arn:aws:s3:::sitetasting.ml/*"」のドメインはご自身が取得したドメインを入力する
・「プロパティ」タブをクリック後、バケットウェブサイトエンドポイントに表示されている「URL」をクリックする
・index.htmlの中身が表示されていることを確認する
■3.Route53のロードバランサーのレコードにプライマリのフェイルオーバールーティングの設定をする
使用サービス:Route53
・ナビゲーションペインの「ホストゾーン」をクリック後、設定をしたい「ドメイン名(今回はsitetasting.ml)」をクリックする
・「ロードバランサー」のレコードにチェックをし「編集」ボタンをクリックする
・以下の内容を入力し「変更を保存」ボタンをクリックする
ルーティングポリシー:フェイルオーバー
フェイルオーバーレコードタイプ:プライマリ
レコードID:任意
■4.Route53のS3のレコードにセカンダリのフェイルオーバールーティングの設定をする
使用サービス:S3
・sitetasting.mlのホストゾーンで「レコードを作成」ボタンをクリックする
・以下の内容を入力し「次へ」ボタンをクリックする
ルーティングポリシー:フェイルオーバー
・以下の内容を入力する
TTL (秒):60
○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
・「フェイルオーバーレコードを定義」ボタンをクリックする
・以下の内容を入力し「フェイルオーバーレコード定義」ボタンをクリックする
値/トラフィックのルーティング先
エンドポイントを選択:S3ウェブサイトエンドポイントへのエイリアス
リージョンを選択:先ほど作成したバケットがあるリージョン
S3バケットを選択:先ほど作成したバケット名
※ここでバケット名が自動表示されない場合は、バケット名とドメイン名が一致していない可能性がある
フェイルオーバーレコードタイプ:セカンダリ
レコードID:任意
・「レコードを作成」ボタンをクリックする
■5.フェイルオーバールーティングの動作確認をする
・EC2のリソースが問題なく表示されることをブラウザでアクセスし確認する
・プライマリの障害発生を仮定してEC2インスタンスを停止し、セカンダリへの切り替わりをブラウザでアクセスし確認する
○Tips
TTLの設定時間より前にアクセスした場合は503エラー画面が表示される
・プライマリの復旧を仮定してEC2インスタンスを起動し、セカンダリからプライマリへの切り替わりをブラウザでアクセスし確認する
設定は以上になります。
AWSってほんと楽しいですね!
この記事が気に入ったらサポートをしてみませんか?