サーバー障害時にDNSを切り替えて予備系に流したり、メンテ中の表示を出すのに自動でDNSを切り替える事ができないかな...と思い立ってやってみました。
使うもの
- AWS Route53
費用
AWSエンドポイント対しては50件までは無料なはずです。AWS外の場合は$0.75/月のようです。
トラフィックフローの場合は$50/月なのでフェイルオーバーだけの目的であれば、月約100円で安心が買えます。
- 新規および既存のお客様は、AWS アカウント内にあるか、AWS アカウントにリンクされた最大 50 個の AWS エンドポイントに対してヘルスのェックを無料で利用できます (オファー)。
設定方法
ヘルスチェック
DNSの切り替えるための死活監視のために、まずはRoute53のヘルスチェックの設定をします。
- 「ヘルスチェックの作成」を選択します。
- 環境設定で名称を入れ、モニタリングの対象にエンドポイントを選択します。

- エンドポイントの監視の部分にはチェック対象のIPアドレスを設定します。

DNS設定
プライマリー側
- TTLは切り替えを考慮して60secが推奨のようです。「1m」を押すと60が入ります。
- Routing Policyに「Failover」を設定し、メインのFailover Rocord Type に「Primary」を設定します。Seit-IDは自動作成されます(特に変更する必要は無いようです)
- Associate With Health Check に「Yes」を設定し、先ほどヘルスチェックで設定した名称を入れます。

セカンダリー側
- セカンダリー側も同じサブドメインで設定します。
- TTLは切り替えを考慮して60secが推奨のようです。「1m」を押すと60が入ります。
- Routing Policyに「Failover」を設定し、メインのFailover Rocord Type に「Secondary」を設定します。

- セカンダリーは生きている前提なのでAssociate With Health Check は「No」で良いかと思います(節約)
テスト方法
サーバーを落とす方法もありますが、ヘルスチェックの「高度な設定」で「ヘルスチェックステータを反転」にチェックを入れる事でDNSの切り替わりが確認できると思います。

ごにょごにょ
ヘルスチェックはICMP Pingが使えないので、ルータなどの場合はどこか監視用のTCPポートを開けておく必要があります。また、HTTPの場合200が返ってくるのが条件なので、適当に設定して404等になっているとヘルスチェック失敗になりますのでご注意ください(知らなかった。
ただ、これをうまく利用すると、特定のHTMLファイルが無い時にはDNSの向き先が変わるような設定ができるので保守時などにも使えるような気がします。
参考