この記事について
Route53にはフェイルオーバールーティングというルーティングポリシーがあります。
フェイルオーバールーティングには以下の3つの要素があります。
- プライマリレコード
- セカンダリレコード
- ヘルスチェック
ヘルスチェックではチェック対象のURL(もしくはIPアドレス)を指定して、HTTP/HTTPSリクエストを送信します。ステータスコードが200であればヘルスチェックが正常であると判定されます。それ以外のステータスコードの場合は異常と判定されます。
フェイルオーバールーティングではヘルスチェックを定期的に行い、ヘルスチェックが正常である場合はプライマリレコードのDNSクエリを返します。ヘルスチェックが異常の場合はセカンダリレコードのDNSクエリを返します。
プライマリレコードからセカンダリレコードへの切り替わりことをフェイルオーバーと呼びます。
ヘルスチェックが異常から正常に戻った際は、セカンダリレコードからプライマリレコードに切り替わります。これをフェイルバックと呼びます。
この記事ではこれらフェイルオーバーとフェイルバックが発生したことをCloudWatch Alarmで検知する方法について記載します。
Rout53 ヘルスチェックのモニタリング
Route53にはヘルスチェックステータスというメトリクスがあります。
このメトリクスが取りうる値は0か1のみであり、ヘルスチェックが正常である場合は1、異常である場合は0となります。
このヘルスチェックステータスを利用して、CloudWatch Alarmを設定することで、フェイルオーバーとフェイルバックを検知することが可能です。
CloudWatch Alarmの設定
フェイルオーバー検知用のアラームとフェイルバック検知用のアラームを2つ作成します。
フェイルオーバー検知用のアラーム
CloudWatch Alarmの設定には"メトリクスと条件"と"アクション"があります。
"メトリクスと条件"で対象のメトリクスと閾値を定義して、"アクション"で閾値を超過した際のアクションを定義します。
"メトリクスと条件"はフェイルオーバーでもフェイルバックでも同じになります。
"アクション"のアラーム条件のトリガーがフェイルオーバーとフェイルバックでは異なります。
また私はSNSトピックに通知を送信して、それをNewRelicに送信することでNewRelicでフェイルオーバーとフェイルバックの監視をできるようにしております。この記事ではアクションにおける通知先については言及しないため、各々の好みに合わせてカスタマイズいただければ良いかと思います。
メトリクスと条件
項目 | 値 | 備考 |
---|---|---|
メトリクス(名前空間 メトリクス名) | AWS/Route53 HealthCheckStatus | |
HealthCheckId | 作成したヘルスチェックのHealthCheckId | |
統計 | 最小 | |
条件 しきい値の種類 | 静的 | |
条件 アラーム条件 | HealthCheckStatusが1よりも低い |
アクション
項目 | 値 | 備考 |
---|---|---|
アラーム条件のトリガー | アラーム状態 | |
次のSNSトピックに通知を送信 | 任意 |
フェイルバック検知用のアラーム
メトリクスと条件
項目 | 値 | 備考 |
---|---|---|
メトリクス(名前空間 メトリクス名) | AWS/Route53 HealthCheckStatus | |
HealthCheckId | 作成したヘルスチェックのHealthCheckId | |
統計 | 最小 | |
条件 しきい値の種類 | 静的 | |
条件 アラーム条件 | HealthCheckStatusが1よりも低い |
アクション
項目 | 値 | 備考 |
---|---|---|
アラーム条件のトリガー | OK | |
次のSNSトピックに通知を送信 | 任意 |
通知内容
CloudWatch AlarmからSNSトピックへの通知(JSON形式)の中にMessage.AlarmName
があります。このキーにはCloudWatch Alarmのアラーム名が入りますので、これでフィルタリングすればフェイルオーバとフェイルバックの発生を監視ツール(NewRelicやDatadog)で検知することが可能です。
参考
フェイルオーバールーティング
CloudWatch を使用したヘルスチェックのモニタリング
Amazon Route 53 のヘルスチェックと Amazon CloudWatch を使用したリソースのモニタリング