Amazon Route 53

Amazon Route 53 は、ドメイン名(www.example.com など)を IP アドレスに変換する DNS のサービスです。SAA では、利用者の場所やサーバーの状態に応じて返す行き先を変えるルーティングポリシーの使い分けが頻出です。

ひとことで言うと: インターネットの「電話番号案内」で、しかも相手に合わせて案内先を変えられる受付です。

たとえるなら、「○○店の番号は?」と聞かれたとき、近い店の番号を教えたり(レイテンシー)、本店が休みなら支店の番号を教えたり(フェイルオーバー)、7 割は本店・3 割は新店に案内したり(加重)できる案内係です。

このページで押さえる論点

DNS の名前解決とホストゾーン

DNS(Domain Name System)は、人が覚えやすいドメイン名を、コンピューターが通信に使う IP アドレスに変換する仕組みです。Route 53 では、ドメインごとにホストゾーン(そのドメインの設定をまとめた入れ物)を作り、その中にレコード(「www.example.com → 192.0.2.44」のような対応表の 1 行)を登録します。Route 53 ではドメイン名の登録(取得)もできます。

ホストゾーンには 2 種類あります。インターネットからの問い合わせに答えるパブリックホストゾーンと、関連付けた VPC の中からの問い合わせだけに答えるプライベートホストゾーンです(後述)。

再生型アニメ図解

名前解決の流れ

ブラウザ Web サーバー 192.0.2.44 DNS リゾルバー (ISP など) ルート・.com の ネームサーバー Route 53 IP: 192.0.2.44

※簡略化しています: ルートと .com(TLD: トップレベルドメイン)のネームサーバーへの問い合わせを 1 つの箱にまとめています。実際の流れはミリ秒単位で終わります。

図では 1 つの箱にまとめていますが、実際にはリゾルバーはまずルートのネームサーバーに問い合わせて .com の担当を教わり、次に .com(TLD: トップレベルドメイン)のネームサーバーに問い合わせて example.com の担当(Route 53)を教わります。各段階の答えはリゾルバーにキャッシュされるので、毎回すべてを問い合わせるわけではありません。

レコードの種類: エイリアスと CNAME、TTL

よく使うレコードタイプは、名前を IPv4 アドレスに対応付ける A レコード、IPv6 アドレスに対応付ける AAAA レコード、名前を別の名前に対応付ける CNAME レコードです。Route 53 には独自の拡張としてエイリアスレコードがあり、ELB や CloudFront などの AWS リソースを名前で直接指せます。

項目エイリアスレコードCNAME レコード
ドメインの頂点(Zone Apex。example.com そのもの)作成できる作成できない
向けられる先特定の AWS リソース(ELB、CloudFront、S3 バケット、API Gateway、VPC インターフェイスエンドポイント、Global Accelerator など)と、同じホストゾーン内の別のレコード任意のドメイン名(Route 53 以外の DNS サービスのレコードも可)
クエリの料金AWS リソースへのエイリアスクエリは無料課金される
TTL設定できない(AWS リソースの既定の TTL、または参照先レコードの TTL を使う)自分で設定する

TTL(Time To Live)は、リゾルバーがレコードの答えをキャッシュしてよい秒数です。TTL を長くすると Route 53 への問い合わせが減り、応答が速くなって Route 53 の料金も下がります。その代わり、IP アドレスを変更しても利用者に反映されるまで時間がかかります。AWS は、使用中のレコードを変えるときはまず 300 秒程度の短い TTL にし、新しい設定が正しいと確認してから TTL を延ばす手順を案内しています。フェイルオーバーで行き先を切り替えても、利用者側に古い答えがキャッシュされている間は切り替わらない点にも注意します。

ルーティングポリシー

同じ名前(www.example.com)に複数のレコードを作り、どのレコードで応答するかをルーティングポリシーで決めます。ヘルスチェック(Route 53 が定期的にサーバーの生存を確認する機能)と組み合わせると、異常なサーバーを応答から外せます。

ポリシー応答の決め方選ぶ場面
シンプル1 つのレコードの値を返す。値を複数登録するとすべてをランダムな順序で返す。ヘルスチェックは使えない1 台のサーバーに向けるだけ
加重「そのレコードの重み ÷ 全レコードの重みの合計」の割合で選ぶ。重み 0 で送信停止新バージョンに一部だけ流す、段階的な移行
レイテンシー利用者から遅延が最も小さい AWS リージョンのレコードを返す複数リージョンで応答速度を最適化
フェイルオーバープライマリが正常ならプライマリ、異常ならセカンダリを返すアクティブ/パッシブの災害対策
位置情報利用者のいる大陸・国・米国の州に対応するレコードを返す。範囲が重なれば小さい方を優先国ごとの言語切り替え、配信権のある国だけに提供
地理的近接性利用者とリソースの場所から最も近いリソースを返す。バイアスで担当範囲を広げたり狭めたりできる地域間でトラフィックを寄せたい・移したい
IP ベース利用者の送信元 IP アドレスの範囲(CIDR)ごとに返すレコードを決める特定の ISP の利用者を特定のエンドポイントへ送り、性能向上や転送コスト削減を図る
複数値回答正常なレコードをランダムに最大 8 つ返すDNS で複数の IP アドレスを返し、異常なものは除きたい(ロードバランサーの代わりではない)
操作できるシミュレーター

ポリシー・利用者の場所・ヘルスチェックを変えてみよう

www.example.com のレコードが、東京リージョンとバージニア北部リージョン(米国東部)の 2 つのサーバーを指しています。

利用者 Route 53 東京 バージニア北部
設定
ヘルスチェックの結果

※簡略化しています: 利用者からの遅延は「日本は東京が近い、米国とドイツはバージニア北部が近い」と仮定しています。レコードはすべてヘルスチェック付き(シンプルを除く)とし、DNS のキャッシュ(TTL)は考えません。加重の振り分けは乱数で行うので、100 回ではぴったり 70 : 30 にならないことがあります。

図では省略している DNS のキャッシュ(TTL)の影響は「レコードの種類」、ヘルスチェックの仕組みは「ヘルスチェック」で説明しています。

ヘルスチェックとフェイルオーバー構成

Route 53 のヘルスチェックには 3 種類あります。

種類何を見るか使う場面
エンドポイントのモニタリングIP アドレスまたはドメイン名で指定したサーバーに、インターネット経由で定期的にリクエストを送る公開している Web サーバーの生存確認
他のヘルスチェックのモニタリング(算出したヘルスチェック)複数のヘルスチェックの結果をまとめて判定する「5 台中 3 台以上正常なら正常」のように、最低限の台数が動いているかで判断したい
CloudWatch アラームのモニタリングCloudWatch アラームの状態を見るプライベート IP アドレスしかない VPC 内のリソースや、任意のメトリクスで判定したい

エンドポイントのチェック間隔は 30 秒(標準)か 10 秒(高速)を選べます。世界各地にあるヘルスチェッカーのうち 18% を超えるものが正常と報告すれば、Route 53 はそのエンドポイントを正常と見なします。ヘルスチェッカーは VPC の外にあるので、プライベート IP アドレスしか持たないインスタンスは直接チェックできません。この場合は、EC2 の StatusCheckFailed などのメトリクスに CloudWatch アラームを設定し、そのアラームを監視するヘルスチェックを作ります。

ヘルスチェックを使ったフェイルオーバー構成には 2 つの型があります。

プライベートホストゾーンと Route 53 Resolver

プライベートホストゾーン

社内システム用の「db.internal.example.com」のように、VPC の中だけで使う名前を管理するのがプライベートホストゾーンです。関連付けた VPC の中からの問い合わせにだけ答えます。作成後に別の VPC を追加で関連付けることも、別の AWS アカウントの VPC に関連付けることもできます。

Route 53 Resolver(オンプレミスとの DNS 連携)

VPC には、すべての VPC で既定で使える DNS リゾルバー(Route 53 Resolver)があり、VPC のネットワーク範囲の先頭アドレスに 2 を足した「VPC+2」のアドレスで接続します。オンプレミスのデータセンターと VPC を Direct Connect や VPN でつないだとき、お互いの名前を引けるようにするのが Resolver エンドポイントです。向きで 2 種類を使い分けます。

エンドポイント問い合わせの向き例
インバウンドエンドポイントオンプレミス(または別の VPC)→ VPC社内の PC から、プライベートホストゾーンの名前を引く
アウトバウンドエンドポイントVPC → オンプレミス(または別の VPC)EC2 から、社内 DNS サーバーが管理する名前を引く。どのドメイン名を転送するかは転送ルール(Resolver ルール)で指定し、ルールは複数のアカウントで共有できる

問題文のキーワード → 選ぶべき答え

問題文の言い回し選ぶべき答えと理由
「新バージョンに 10% だけ流したい」「段階的に移行」加重。重みの比率で振り分ける
「利用者に最も応答の速いリージョンへ」レイテンシー。遅延の実績で決まる
「障害時にセカンダリ(S3 の静的サイトなど)へ自動で切り替え」フェイルオーバー+ヘルスチェック(アクティブ/パッシブ)
「国ごとに言語を変える」「配信権のある国だけに提供」位置情報(+デフォルトレコード)
「リソースの場所に基づき、ある地域の担当範囲を広げたい」地理的近接性(バイアスで調整)
「特定の ISP の利用者を特定のエンドポイントへ」「送信元 IP 範囲で振り分け」IP ベース(CIDR コレクション)
「複数の IP アドレスを返し、異常なものは返さない」複数値回答(正常なものを最大 8 つ)
「example.com(頂点)を ALB や CloudFront に向けたい」エイリアスレコード。CNAME は頂点に作れない
「DNS クエリの料金を抑えて AWS リソースに向けたい」エイリアスレコード。AWS リソースへのエイリアスクエリは無料
「VPC の中だけで使う社内向けの名前」プライベートホストゾーン(enableDnsHostnames・enableDnsSupport を有効に)
「オンプレミスから VPC 内の名前を解決したい」Resolver インバウンドエンドポイント
「VPC からオンプレミスの DNS サーバーの名前を解決したい」Resolver アウトバウンドエンドポイント+転送ルール
「プライベート IP しかないインスタンスの状態でフェイルオーバー」CloudWatch アラームを監視するヘルスチェック
「複数台のうち一定数以上が正常かで判定」算出したヘルスチェック

引っかけポイント

まとめ: SAA 試験で押さえるポイント

確認問題

参考リンク

AWS 公式ドキュメント(外部サイトが開きます)。本文の数値はこれらで確認しています。