Route53フェイルオーバでSorryページをELB固定レスポンス表示させる

2019.07.17

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

こんにちは、久住です。

Sorryページ表示を検証する機会があったので、2回に分けてまとめて書かせていただきます。

インターネットVPN経由での通信だったので、Route53フェイルオーバ+ELBの方式で検討しました。

※検証のためパブリックIPでの接続で試してますが、インターネットVPNで接続する場合はInternalELBで設定する必要があります。

はじめに

今回はRoute53フェイルオーバでELBの固定レスポンスを返す構成を試します。

Route53フェイルオーバは「ターゲットの正常性評価」を利用します。

Amazon Route53の新機能 ELBをHealth Checkのターゲットにしてみた

設定

Route53設定

ホストゾーンの設定

アクセス用のドメインのホストゾーンを作成します。

レコードセットの設定

レコードセットを2つ作成します。

ルーティングポリシーをプライマリ、セカンダリで2つ作成します。

プライマリは下記の通り設定します。

  • ルーティングポリシ:「フェイルオーバ」
  • フェイルオーバレコードタイプ:「プライマリ」
  • Aレコード(ALIAS):正常系アクセス用のELBを指定
  • ターゲットの正常性の評価:「はい」

ターゲットの正常性の評価を「はい」にすることで、ELBのターゲットに指定されたEC2への疎通正常性確認によりフェイルオーバを実施することが可能です。

セカンダリは下記の通り設定します。

  • ルーティングポリシ:「フェイルオーバ」
  • フェイルオーバレコードタイプ:「セカンダリ」
  • Aレコード(ALIAS):Sorryページ用のELBを指定

ELB設定

プライマリ(正常系アクセス)用のELB

正常系アクセス用のELBはターゲットにEC2を配置し、HTTP/HTTPSをリッスンする設定をしています。

セカンダリ(Sorryページ)用のELB

Sorryページ用のELBはターゲットは無しとし、ルールで固定レスポンスを返す設定をしました。

フェイルオーバタイムの短縮

ELBのターゲットグループのヘルスチェック設定のデフォルトの設定値だとフェイルオーバに3分程度かかっていたので、設定値のチューニングで短時間でのフェイルオーバについても検討しました。

ターゲットの正常性評価にかかる時間

ターゲットグループのヘルスチェック設定

ELBのターゲットのヘルスチェックは下記項目で設定できます。

設定項目 概要 範囲 デフォルト
正常のしきい値 異常なターゲットが正常であると見なされるまでに必要なヘルスチェックの連続成功回数 2~10 5
非正常のしきい値 ターゲットが異常であると見なされるまでに必要なヘルスチェックの連続失敗回数 2~10 2
タイムアウト ヘルスチェックを失敗と見なす、ターゲットからレスポンスがない時間 (秒単位) 2~120 秒 ターゲットタイプが instance または ip の場合:5秒

ターゲットタイプが lambda の場合の: 30秒

間隔 個々のターゲットのヘルスチェックの概算間隔 (秒単位) 5~300 秒 ターゲットタイプが instance または ip の場合:30秒

ターゲットタイプが lambda の場合の: 35秒

ターゲットグループのヘルスチェック設定がデフォルトの場合、ターゲットの正常性評価のためのヘルスチェックがフェイルオーバタイムのボトルネックとなるため、設定値をチューニングする必要があります。

 

Route53のAliasレコードのTTL

フェイルオーバの時間についてですが、ALIASレコードのTTLがデフォルト60秒(変更不可)のため、ターゲットの正常性評価の時間を短縮してもTTLに影響されるようです。

https://dev.classmethod.jp/cloud/amazon-route-53-alias-ttl/

フェイルオーバしてみた

通常アクセス用のELBの配下に配置しているEC2を停止すると、Route53のターゲット正常性評価がはたらき、プライマリからセカンダリにフェイルオーバすることが確認できました。

フェイルオーバ

  • EC2停止時刻:17時58分29秒
  • フェイルオーバ:17時59分40秒
$ date
2019年 6月24日 月曜日 17時59分38秒 JST
$ curl https://web.kusumicorp.xxxx.xx

<center></center> 
<h1>503 Service Temporarily Unavailable</h1>
$ date
2019年 6月24日 月曜日 17時59分40秒 JST
$ curl https://web.kusumicorp.xxxx.xx
只今メンテナンス中です(固定レスポンス)

復旧

  • EC2起動時刻:17時38分15秒
  • 復旧:17時39分27秒
bash-3.2$ curl https://web.kusumicorp.xxxx.xx
只今メンテナンス中です(固定レスポンス)
$ date
2019年 6月24日 月曜日 17時39分27秒 JST
$ curl https://web.kusumicorp.xxxx.xx

(省略)

参考

https://dev.classmethod.jp/cloud/aws/route53-elb-healthcheck/

https://dev.classmethod.jp/cloud/aws/route53-internalelb-dns-failover/