Route53のヘルスチェックでInternalELBをフェイルオーバさせてみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

AWSがマネージドサービスとして提供しているAmazon Route 53、 SLA100%が謳われているDNSに加え、 ヘルスチェック機能が存在し、外部監視と連携したDNSフェイルオーバを簡単に利用する事が可能です。

本日(4/6)のアップデートにより、CloudWatchアラームと連携したRoute53のヘルスチェックが可能となりました。

早速、VPC内専用のInternalELBに、CloudwatchのアラームとRoute53ヘルスチェックを設定して、 DNSフェイルオーバの動作を試す事ができましたので、その内容を紹介させていただきます。

設定

ELB

  • ELBの設定画面でCloudWatchのアラームを設置します。

r53-healthcheck-cw-01

  • ELB配下に有効なインスタンスが1台未満となった場合に発動するアラームを作成しました。

r53-healthcheck-cw-02

Route53

ヘルスチェック

  • AmazonRoute53の設定画面より、「Health checks」より新規設定を行います

r53-healthcheck-cw-03

  • 今回のアップデートで選択可能になった「State of Cloudwatch alarm」を指定します

r53-healthcheck-cw-04

  • 通知設定は省略しました

r53-healthcheck-cw-05

  • CloudWatchと連携したヘルスチェック設定が作成されました

r53-healthcheck-cw-06

DNSフェイルオーバ設定

  • Route53、テスト用のHostedZoneをプライベート用に用意しました

プライマリ

  • ヘルスチェック対象としたInternalELBのエンドポイントをプライマリとした、CNAMEレコードを作成します
  • ヘルスチェック指定は、先ほどRoute53ヘルスチェックで作成したものを指定します

r53-healthcheck-cw-07

セカンダリ

  • テスト用にグローバルのエンドポイントをセカンダリのCNAMEレコードとして設定しました。

r53-healthcheck-cw-08

動作確認

プライマリ動作

  • VPC内のEC2より、プライマリ設定したレコードが引ける事を確認ました

r53-healthcheck-cw-13

擬似障害発生

  • ELBのヘルスチェック先のポートを無効なものに変更し、擬似障害を発生させました

r53-healthcheck-cw-09

  • ELB配下のEC2インスタンスのステータス、「OutofService」となります

r53-healthcheck-cw-10

  • CloudWatchのアラームが発動し、「ALARM」状態となります

r53-healthcheck-cw-11

  • Route53のヘルスチェック「Unhealthy」となります。

r53-healthcheck-cw-12

セカンダリ動作

  • セカンダリのレコードが利用される様になりました。

r53-healthcheck-cw-14

まとめ

従来プライベートサービスのDNSフェイルオーバを実現するためには、クラスタ製品の導入や、CloudWatchイベントやLambdaなどを駆使する必要がありましたが、 今回のアップデートによりRoute53でシンプルな設定が可能となりました。

Amazon Route 53のヘルスチェック、同一AWSアカウントのリソースであれば基本チェックであれば50件まで無料です。

障害時の誘導先となるセカンダリ、WebサービスであればS3のWebホスティングでソーリーページを準備する事で、低コストなバックアップ環境となる可能性があります。 縮退運転用の迂回経路、低コスト、高い信頼性で確保できるRoute53のヘルスチェックとDNSフェイルオーバ、是非ご活用ください。