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 の中からの問い合わせだけに答えるプライベートホストゾーンです(後述)。
名前解決の流れ
※簡略化しています: ルートと .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 アドレスを返し、異常なものは除きたい(ロードバランサーの代わりではない) |
- 位置情報では、どの場所にも当てはまらない問い合わせや、場所を特定できない IP アドレスからの問い合わせに備えてデフォルトレコードを作ります。ないと Route 53 は「応答なし」を返します。
- 地理的近接性のバイアスは、1〜99 の正の値で担当範囲を広げ(隣の範囲は縮む)、-1〜-99 の負の値で狭めます。「国」で決まる位置情報と違い、「距離」で決まり、その距離の境目をずらせるのが特徴です。
- レイテンシーは利用者と AWS リージョンの間で測った遅延の実績で決まり、時間とともに変わります。そのため、地理的に一番近いリージョンが選ばれるとは限りません。
- 加重では、重みが 0 より大きいレコードがすべて異常になると、重み 0 のレコードが応答の対象になります。
ポリシー・利用者の場所・ヘルスチェックを変えてみよう
www.example.com のレコードが、東京リージョンとバージニア北部リージョン(米国東部)の 2 つのサーバーを指しています。
※簡略化しています: 利用者からの遅延は「日本は東京が近い、米国とドイツはバージニア北部が近い」と仮定しています。レコードはすべてヘルスチェック付き(シンプルを除く)とし、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 つの型があります。
- アクティブ/パッシブ: 普段はプライマリだけで応答し、プライマリがすべて異常になったらセカンダリで応答します。フェイルオーバールーティングで作ります。「障害時は S3 の静的サイト(メンテナンス画面)へ」などの災害対策(DR)で使います。
- アクティブ/アクティブ: 同じ名前・同じタイプ・同じルーティングポリシー(加重やレイテンシーなど)のレコードをすべて使い、異常と判定されたものだけを応答から外します。
プライベートホストゾーンと Route 53 Resolver
プライベートホストゾーン
社内システム用の「db.internal.example.com」のように、VPC の中だけで使う名前を管理するのがプライベートホストゾーンです。関連付けた VPC の中からの問い合わせにだけ答えます。作成後に別の VPC を追加で関連付けることも、別の AWS アカウントの VPC に関連付けることもできます。
- 使うには、VPC の設定 enableDnsHostnames と enableDnsSupport を両方とも true にする必要があります。
- パブリックホストゾーンと同じ名前で作ると、インターネットからは公開用の答え、VPC の中からは社内用の答えを返せます(スプリットビュー DNS)。
- 使えるルーティングポリシーは、シンプル・フェイルオーバー・複数値回答・加重・レイテンシー・位置情報・地理的近接性です。IP ベースは使えません。
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 アラームを監視するヘルスチェック |
| 「複数台のうち一定数以上が正常かで判定」 | 算出したヘルスチェック |
引っかけポイント
- 「位置情報ルーティングで、どこにも当てはまらない利用者は最も近いリージョンに回される」→ ✕。デフォルトレコードがないと「応答なし」になります。距離で決めたいなら地理的近接性です。
- 「レイテンシールーティングは地理的に一番近いリージョンを返す」→ ✕。遅延の実績で選ぶので、近いリージョンになるとは限りません。
- 「CNAME レコードで example.com(頂点)を ALB に向ける」→ ✕。頂点には CNAME を作れません。エイリアスレコードを使います。
- 「シンプルルーティングに値を複数登録すれば、異常なサーバーは自動で外れる」→ ✕。シンプルはヘルスチェックを使えません。異常なものを外したいなら複数値回答です。
- 「複数値回答ルーティングはロードバランサーの代わりになる」→ ✕。AWS も「ロードバランサーに代わるものではない」としています。リクエスト単位の負荷分散が必要なら ELB です。
- 「Route 53 のヘルスチェックで、VPC 内のプライベート IP のインスタンスを直接チェックできる」→ ✕。ヘルスチェッカーは VPC の外にあります。CloudWatch アラームを監視するヘルスチェックを使います。
- 「オンプレミスから VPC の名前を引くにはアウトバウンドエンドポイント」→ ✕。問い合わせが VPC に入ってくる向きなのでインバウンドです。
まとめ: SAA 試験で押さえるポイント
- 1 台のサーバーに向けるだけ → シンプル(ヘルスチェックは使えない)
- 新バージョンに 1 割だけ流すなど、割合で振り分けたい → 加重(重み ÷ 重みの合計 の割合で振り分け。重み 0 で停止)
- 複数リージョンに置き、利用者に最も速く応答できるリージョンへ → レイテンシー
- 本番が落ちたら予備サイト(S3 の静的サイトなど)へ自動で切り替えたい → フェイルオーバー(アクティブ/パッシブ構成。ヘルスチェックと組み合わせる)
- 国ごとに言語を変えたい・配信権のある国だけに出したい → 位置情報。当てはまらない場所の問い合わせに備えてデフォルトレコードを作る(ないと「応答なし」)
- 距離で決めて担当範囲を調整 → 地理的近接性、送信元 IP 範囲で決める → IP ベース、正常な値を最大 8 つ返す → 複数値回答
- ELB・CloudFront・S3 などの AWS リソースへはエイリアスレコードで向ける。ドメインの頂点(example.com そのもの)にも使え、AWS リソースへのクエリは無料
- TTL を長くすると料金と応答時間は下がるが、変更の反映は遅くなる
- ヘルスチェックは 3 種類(エンドポイント・算出・CloudWatch アラーム)。プライベートなリソースは CloudWatch アラーム経由
- VPC 内だけの名前 → プライベートホストゾーン。オンプレミス → VPC はインバウンド、VPC → オンプレミスはアウトバウンドの Resolver エンドポイント
確認問題
参考リンク
AWS 公式ドキュメント(外部サイトが開きます)。本文の数値はこれらで確認しています。
- インターネットトラフィックがウェブサイトまたはウェブアプリケーションにルーティングされる仕組み
- ルーティングポリシーの選択(複数値回答は最大 8 つ)
- シンプルルーティング
- 加重ルーティング
- レイテンシーに基づくルーティング
- 位置情報ルーティング
- 地理的近接性ルーティング(バイアス 1〜99、-1〜-99)
- IP ベースのルーティング
- 複数値回答ルーティング
- エイリアスレコードと非エイリアスレコードの選択
- レコードの値(TTL)
- ヘルスチェックの種類
- Route 53 がヘルスチェックの正常性を判断する方法(間隔 30 秒/10 秒、18%)
- プライベートホストゾーンでのヘルスチェック
- ヘルスチェックが設定されている場合のレコードの選び方
- アクティブ/アクティブとアクティブ/パッシブのフェイルオーバー
- プライベートホストゾーンの使用
- プライベートホストゾーンを使用する際の考慮事項
- Route 53 Resolver(インバウンド/アウトバウンドエンドポイント)