Amazon Route 53 の複雑な構成でのヘルスチェックの動作
複雑な構成であっても、リソースの正常性をチェックする方法は同じです。ただし、複雑な構成では、エイリアスレコード (加重エイリアスやフェイルオーバーエイリアスなど) と非エイリアスレコードを組み合わせてデシジョンツリーを構築し、リクエストに対する Route 53 の応答を柔軟に制御することができます。
例えば、レイテンシーエイリアスレコードを使用して、ユーザーに近いリージョンを選択することが考えられます。また、各リージョン内の複数のリソースに加重レコードを使用して、単一エンドポイントやアベイラビリティーゾーンの障害への対策を講じることも可能です。この設定は以下の図のようになります。
Amazon EC2 と Route 53 の設定方法は次のとおりです。ツリーの一番下から始めましょう。これはレコードを作成する順序です。
-
us-east-1 と ap-southeast-2 という 2 つのリージョンのそれぞれに、2 つの EC2; インスタンスが存在します。EC2 インスタンスが正常であるかどうかを判断して、Route 53 がトラフィックをルーティングするように、各インスタンスのヘルスチェックを作成します。各ヘルスチェックを設定して、インスタンスの Elastic IP アドレスで対応するインスタンスにヘルスチェックリクエストを送信します。
Route 53 はグローバルサービスであるため、ヘルスチェックを作成するリージョンは指定しないでください。
-
インスタンスタイプに基づいて各リージョンの 2 つのインスタンスにトラフィックをルーティングするため、各インスタンスに加重レコードを作成し、各レコードに重みを付与します。(後で加重を変更して、より多くのトラフィックを、またはより少ないトラフィックをインスタンスにルーティングできます。) また、該当するヘルスチェックを各インスタンスに関連付けます。
レコードを作成するとき、us-east-1-www.example.com. や ap-southeast-2-www.example.com. などの名前を使用します。ツリーの一番上に到達するまで待って、ユーザーがウェブサイトやウェブアプリケーションにアクセスするために使用する名前 (example.com など) をレコードに渡します。
-
ユーザーのレイテンシーが最も短いリージョンにトラフィックをルーティングする場合は、ツリー上部のレコードのレイテンシーのルーティングポリシーを選択します。
トラフィックを各リージョンのリソースに直接ルーティングするのではなく、各リージョンのレコードにルーティンしたいとします(加重レコードはすでにしています)。その結果、レイテンシーのエイリアスレコードを作成することになります。
エイリアスレコードを作成するときに、ユーザーがウェブサイトやウェブアプリケーションにアクセスするために使用する名前 (example.com など) を指定します。エイリアスレコードは、example.com のトラフィックを us-east-1-www.example.com と ap-southeast-2-www.example.com のレコードにルーティングします。
レイテンシーエイリアスレコードの [Evaluate Target Health] の値は、どちらも [Yes] に設定します。これにより Route 53 は、リージョンにトラフィックをルーティングしようとする前に、そこに正常なリソースがあるかどうかを判断します。正常なリソースがない場合、Route 53 は、他のリージョンから正常なリソースを選択します。
前の図は、以下の一連のイベントを示したものです。
-
Route 53 が example.com のクエリを受信します。要求元のユーザーに対するレイテンシーに基づいて、Route 53 は us-east-1 リージョンのレイテンシーエイリアスレコードを選択します。
-
Route 53 は、重みに基づいて加重レコードを選択します。レイテンシーエイリアスレコードの [Evaluate Target Health (ターゲットの正常性の評価)] が [Yes (あり)] であるため、Route 53 は、選択された加重レコードの正常性をチェックします。
-
ヘルスチェックで不合格と判明した場合、Route 53 は、別の加重レコードを重みに基づいて選択し、その正常性をチェックします。そのレコードも異常であると判明します。
-
Route 53 は、ブランチの出発点に戻り、次善のレイテンシーを持つレイテンシーエイリアスレコードを検索して、ap-southeast-2 のレコードを選択します。
-
Route 53 は再度、重みに基づいてリソースを選択し、その正常性をチェックします。リソースは正常なので、Route 53 はクエリに対応した適切な値を返します。
エイリアスレコードにヘルスチェックを関連付けるとどうなるか
[Evaluate Target Health] の値を [Yes] に設定する代わりに (または設定したうえで)、エイリアスレコードにヘルスチェックを関連付けることができます。ただし、実用性の面からいうと、基盤になるリソース (HTTP サーバー、データベースサーバーなど、エイリアスレコードの参照先となるリソース) の正常性に基づいて Route 53 がクエリに応答する、という構成の方が一般的です。例えば、次の構成を考えてみます。
-
一連の加重レコードをエイリアスターゲットとするレイテンシーエイリアスレコードにヘルスチェックを割り当てます。
-
レイテンシーエイリアスレコードの [Evaluate Target Health] の値は、[Yes] に設定します。
この設定で、加重レコードに応じた値を Route 53 が返すためには、次の 2 点が満たされなければなりません。
-
レイテンシーエイリアスレコードに関連付けられているヘルスチェックが合格すること。
-
少なくとも 1 つの加重レコードが、合格したヘルスチェックに関連付けられているか、またはヘルスチェックそのものに関連付けられていないことから、正常と見なされること。後者のケースでは、Route 53 は常に加重レコードを正常と見なします。
次の図では、左上のレイテンシーエイリアスレコードのヘルスチェックに失敗しています。結果として、Route 53 は、加重レコードのすべてが正常であっても、レイテンシーエイリアスレコードが参照する加重レコードのいずれかを使用したクエリの応答を停止します。Route 53 は、レイテンシーエイリアスレコードのヘルスチェックが再び正常となった場合にのみ、これらの加重レコードの再チェックを開始します。(例外については、「ヘルスチェックが設定されている場合に Amazon Route 53 がレコードを選択する方法」を参照してください。)
ヘルスチェックを省略するとどうなるか
複雑な構成では、エイリアス以外のすべてのレコードにヘルスチェックを関連付けることが大切です。次の例では、us-east-1 リージョンのいずれかの加重レコードでヘルスチェックが欠落しています。
以下に、この構成の非エイリアスレコードでヘルスチェックを省略した場合の動作を説明します。
-
Route 53 が example.com のクエリを受信します。要求元のユーザーに対するレイテンシーに基づいて、Route 53 は us-east-1 リージョンのレイテンシーエイリアスレコードを選択します。
-
Route 53 は、レイテンシーエイリアスレコードのエイリアスターゲットを探し、対応するヘルスチェックのステータスをチェックします。一方の加重レコードのヘルスチェックが不合格となり、そのレコードは考慮の対象から除外されます。
-
us-east-1 リージョンのエイリアスターゲット内のもう一方の加重レコードにはヘルスチェックが関連付けられていません。ヘルスチェックを行わない限り、対応するリソースが正常であるかどうかを Route 53 が認識する方法はありません。リソースは正常なので、Route 53 はクエリに応じて適切な値を返します。
[Evaluate Target Health] を [No] に設定するとどうなるか
一般に、ツリー内のすべてのエイリアスレコードについて、[ターゲットの正常性の評価] を [Yes (あり)] に設定する必要があります。[Evaluate Target Health (ターゲットの正常性の評価)] を [No (なし)] に設定した場合、Route 53 は、レコードのヘルスチェックが失敗した場合でも、エイリアスレコードが参照するレコードにトラフィックをルーティングし続けます。
次の例では、すべての加重レコードに関連付けられたヘルスチェックがありますが、us-east-1 リージョンのレイテンシーエイリアスレコードの [ターゲットの正常性の評価] は [No (なし)] に設定されています。
この構成でエイリアスレコードの [Evaluate Target Health] を [No] に設定した場合の動作を以下に説明します。
-
Route 53 が example.com のクエリを受信します。要求元のユーザーに対するレイテンシーに基づいて、Route 53 は us-east-1 リージョンのレイテンシーエイリアスレコードを選択します。
-
Route 53 は、レイテンシーエイリアスレコードのエイリアスターゲットを特定し、対応するヘルスチェックを調べます。どちらも不合格です。
-
us-east-1 リージョンでは、レイテンシーエイリアスレコードの [Evaluate Target Health] の値が [No] であるため、Route 53 は、このブランチの中からいずれかのレコードを選ぶ必要があります。ブランチの出発点に戻って ap-southeast-2 リージョンから正常なレコードを探すことはありません。