AWS
route53

Route53で負荷分散をするための選択肢が増えた話

More than 1 year has passed since last update.

TL;DR

Route53 を使っていて、たとえば A Record に対して複数の IP アドレスをなるべく平等に返したい場合(ただしサービスが止まっているノードは除外する)の選択肢として Routing Policy=Weighted(加重リソースレコードセット)がありますが、平等にするにはすべてに同じ重み(weight)を指定する必要があります。

ところが最近(?)Routing Policy=Multivalue Answer(複数値回答)という選択肢が増えたようで、これで毎回異なった値を平等に返してくれるようです。重みの指定は不要です(指定不可)。もちろん Routing Policy=Weighted と同様に、ヘルスチェックを関連付けておけば、ヘルスチェックで Unhealthy なノードは自動的に対象から除外してくれます。

はじめに

フェイルオーバーのしくみを調べていたら、Routing Policy=Multivalue Answer という選択肢が出ることに気づいたのですが、これは日本語ドキュメントには載っていません。原文には載っていたので和訳が追いついていないのだと思いますが、Route53開発者ガイドは現時点でも PDF で 420 ページという大作ですので、AWS の中の人はかなりがんばっているという印象です。

以下に、簡単に選択肢を紹介します。

レコードセットの設定

項目名 値/選択肢
NAME 当該ドメインのサブドメイン(ホスト名)部分
TYPE (たとえば)A - IPv4 Address
Alias(Route53 固有) 【レコードタイプが SOA/NS 以外の場合に選択可能】
Yes:アクセス先が AWS が動的に割り当てる FQDN の場合、
  または別のリソースレコード(同一ホストゾーン内)
No :直に IP アドレスを書く場合

Alias=Yes の場合

項目名 値/選択肢
Alias Target AWS 管理の FQDN(IP アドレスが動的に変わる)等
Routing Policy Simple:常に同じ値を返す(デフォルト)
Weighted:加重による分散
Latency:レイテンシによる分散
Failover:アクティブ/スタンバイ方式による分散
Geolocation:アクセス元の国や地域による分散
Routing Policy
=Weighted
Weight:加重値
Set ID:加重セットグループ中でユニークな文字列
Routing Policy
=Latency
Region:対象リージョン
Set ID:ユニーク文字列
Routing Policy
=Failover
Failover Record Type:Primary または Secondary
Set ID:ユニーク文字列
Routing Policy
=Geolocation
Location:国名や地域を選択肢から選択
Set ID:ユニーク文字列
Evaluate Target Health Yes:AWS 管理の FQDNのヘルスチェックと連携する
  (ただし Alias 先が CloudFront の場合は選択不可)
No :ヘルスチェックを考慮しない
Associate with Health Check 【Routing Policy が Simple の場合は指定不可】
Yes:何らかのヘルスチェックに関連付ける。
  ヘルスチェックが正常でない場合、返す値からそのリソースを除外する。
  これを選択する場合、TTLは60以下を推奨。
No :返す値の絞り込みを行わない。
Associate with Health Check
= Yes
Health Check to Associate:関連付ける対象のヘルスチェック(選択肢から選択)

Alias=No の場合

項目名 値/選択肢
TTL(秒数) クライアントがレコードをキャッシュ可能な時間
Value IPアドレスの値(複数可の場合もある)
Routing Policy Weighted / Latency / Failover / Geolocation(これらは Alias=Yes の場合と同じ扱い)
Routing Policy
=Multivalue Answer
Set ID:ユニーク文字列
最大8個の中から正常なレコードを抽出し、複数の値を毎回ランダムな順序で返す。
Routing Policy=Simple で同じ名前を登録しようとすると二重登録エラーとなるが、Routing Policy = Multivalue Answer でかつ Set ID を異なった値にすることで、同じ名前で複数レコードを登録できる。

おまけ

これを調べている間に日本語マニュアルの中にいくつか不備をみつけたので、各ページ最下段にある [フィードバック] から一応報告しましたが、果たして拾ってもらえるかどうか…。