Amazon Route 53とは ― DNSサービスとルーティングポリシーの仕組み
Route 53は
Route 53とは、AWSのマネージド型DNS Webサービス
example.comのような自分のドメイン名でAWS上のサイトを公開するには、DNSが必要です。DNSで、その名前をCloudFrontやS3などのリソースに結び付けます。Amazon Route 53は、その名前解決をAWSで受け持つサービスです。AWSは、可用性が高くスケーラブルなDNSのWebサービスと説明しています。
AWS公式ドキュメントは、Route 53でできることを3つに分けています。ドメイン名の登録・DNSによる通信の振り分け・リソースの状態の確認(ヘルスチェック)です。この3つは組み合わせて使えます。ほかの事業者で登録したドメインでも、DNSの振り分けだけをRoute 53で行えます。
ホストゾーンとは、ドメインの振り分けルールを入れる箱
ホストゾーンとは、あるドメインとそのサブドメインについて、通信の振り分け方の情報をまとめた入れ物です。Route 53でドメインを登録すると、ホストゾーンが自動で作られます。既存のドメインをRoute 53に移す場合は、先にホストゾーンを自分で作ります。後の節で説明するレコードは、このホストゾーンの中に1件ずつ追加します。
ホストゾーンには、パブリックとプライベートの2種類があります。パブリックホストゾーンは、インターネット上の問い合わせに答えます。一般のWebサイトの名前解決には、こちらを使います。
プライベートホストゾーンは、指定したVPCの中からの問い合わせにだけ答えます。たとえば、VPCの中のデータベースサーバにdb.example.comという名前を付けられます。この名前をプライベートホストゾーンに登録します。VPCの外から同じ名前を問い合わせても、プライベートホストゾーンの内容は返りません。VPCの内部のリソースに、VPCの外には公開しない名前を付けるときに使います。
エイリアスレコードとは、ゾーンの頂点にも置けるRoute 53独自のレコード
エイリアスレコードとは、Route 53だけで使える、CNAMEに似た仕組みのレコードです。CloudFrontディストリビューションやS3バケットなど、選ばれたAWSリソースを指せます。DNSの記事では、CNAMEを別名(エイリアス)と説明しています。エイリアスレコードは、CNAMEとは別の種類のレコードです。
CNAMEレコードは、example.comのようなドメイン名そのものには置けません。ドメイン名そのものにあたるこの位置を、ゾーンの頂点と呼びます。エイリアスレコードはゾーンの頂点にも置けるので、example.comから直接CloudFrontを指せます。
エイリアスレコードとCNAMEレコードには、ほかにも違いがあります。AWSリソースを指すエイリアスレコードへの問い合わせには、料金がかかりません。CNAMEレコードへの問い合わせには、料金がかかります。また、指す先のAWSリソースのIPアドレスが変わると、Route 53は自動で新しいアドレスを返します。
ルーティングポリシーとは、同じ名前への答え方を決める設定
ルーティングポリシーとは、同じ名前への問い合わせに、Route 53がどのレコードを選んで答えるかを決める設定です。レコードを作るときに、このポリシーを1つ選びます。
| ポリシー | 選び方の | ヘルスチェック |
|---|---|---|
| シンプル | 1つのリソースに固定する | 組み合わせられない |
| 加重 | 重みの比率で複数のリソースに振り分ける | 組み合わせられる |
| レイテンシー | ユーザーとの応答時間が最も短いリージョンを選ぶ | 組み合わせられる |
| フェイルオーバー | プライマリが不健全なときだけセカンダリに切り替える | プライマリに付けて使う |
シンプルルーティングは、1つのリソースにだけ振り分けます。複数の値を入れた場合、Route 53はそのすべてをランダムな順で返します。値ごとのヘルスチェックは組み合わせられません。
加重ルーティングは、同じ名前・同じ種類のレコードを複数作り、それぞれに重みを付けます。Route 53は、重みの合計に対する比率で振り分けます。新しいバージョンのソフトウェアを少しずつ試す使い方に向いています。
レイテンシールーティングは、複数のAWSリージョンにレコードを作ります。Route 53は、ユーザーとの間のレイテンシー(応答にかかる時間)が最も低いリージョンのレコードを選びます。レイテンシーの値は時間とともに変わるため、先週と今週で選ばれるリージョンが変わることもあります。
フェイルオーバールーティングは、プライマリとセカンダリの2つのレコードを作ります。プライマリが健全な間は、プライマリを返します。ヘルスチェックでプライマリが不健全と判定された場合だけ、セカンダリを返します。
このほかに、問い合わせの送信元の場所によって振り分ける位置情報ルーティングもあります。大陸・国・米国内の州の単位で振り分け先を変えられます。残り3種類(複数値回答・地理的近接性・IPベース)は省きます。
動かして確かめる:同じ問い合わせに、ポリシーごとにどう答えるか
次の図でルーティングポリシーを切り替えられます。example.comへの同じ問い合わせで、Route 53が選ぶレコードがどう変わるかを比較できます。
1つの名前に対して、通常は1つのレコードだけを置きます。1つのレコードに複数の値を入れた場合は、すべてをランダムな順で返します。
- example.com → 203.0.113.50(Webサーバ)
同じ問い合わせへの答え:どの問い合わせにも、同じ203.0.113.50を返します。
ヘルスチェックと組み合わせられません。203.0.113.50が止まっていても、そのまま返します。
同じ名前・同じ種類のレコードを複数作り、それぞれに重みを付けます。重みの合計に対する比率で振り分けます。
- example.com → 203.0.113.50(重み1)
- example.com → 203.0.113.60(重み255)
同じ問い合わせへの答え:256回の問い合わせのうち、203.0.113.50には約1回、203.0.113.60には約255回を振り分けます。
レコードごとにヘルスチェックを付けられます。不健全と判定されたレコードは、応答から除外されます。
複数のAWSリージョンにレコードを作ります。ユーザーとの間のレイテンシー(応答にかかる時間)が最も低いリージョンのレコードを選びます。
- example.com → 203.0.113.50(米国西部リージョン)
- example.com → 203.0.113.60(アジアパシフィック東京リージョン)
同じ問い合わせへの答え:日本からの問い合わせでは、東京リージョンとのレイテンシーのほうが低ければ、203.0.113.60を返します。
レコードごとにヘルスチェックを付けられます。不健全と判定されたレコードは、応答から除外されます。
プライマリとセカンダリの2つのレコードを作ります。プライマリが健全ならプライマリを、不健全ならセカンダリを返します。
- example.com → 203.0.113.50(プライマリ)
- example.com → 203.0.113.60(セカンダリ)
同じ問い合わせへの答え:プライマリが健全な間は、203.0.113.50を返します。
プライマリにヘルスチェックを付けて使います。ヘルスチェックがプライマリを不健全と判定すると、203.0.113.60を返します。
レコードの数と値が同じでも、ポリシーが変わると、Route 53が返す答えが変わります。ヘルスチェックを組み合わせられるかどうかも、ポリシーごとに違います。
ヘルスチェックとは、リソースの状態を確かめる仕組み
ヘルスチェックとは、Route 53がリソースの状態を定期的に確認する仕組みです。指定した間隔で、WebサーバなどへHTTP・HTTPSなどのリクエストを送り、応答があるかを確認します。
ヘルスチェックには、確認する対象によっていくつかの種類があります。基本は、サーバなどのエンドポイントを直接確認する種類です。ほかに、複数のヘルスチェックの結果をまとめて確認する種類があります。これを計算ヘルスチェックと呼びます。複数のWebサーバのうち、健全な台数が一定数を下回ったときだけ通知したい場合に使います。
フェイルオーバールーティングは、このヘルスチェックの結果を使って、プライマリとセカンダリを切り替えます。たとえば、2台のWebサーバのうち1台が不健全になった場合、Route 53は健全なもう1台へ振り分けを変えます。この仕組みで、別のリージョンに置いた待機側へ通信を切り替える方式は、AWSのDR戦略の記事にまとめています。
参考にした資料
- AWS「What is Amazon Route 53?」(Route 53の定義、3機能、ヘルスチェックの概要)
- AWS「Working with public hosted zones」(パブリックホストゾーンの定義)
- AWS「Working with private hosted zones」(プライベートホストゾーンの定義、VPC外からのアクセス制限)
- AWS「Choosing between alias and non-alias records」(エイリアスレコードの定義、ゾーンの頂点・課金・自動追従の違い)
- AWS「Simple routing」
- AWS「Weighted routing」(重みの比率の計算例)
- AWS「Latency-based routing」
- AWS「Failover routing」
- AWS「Geolocation routing」
- AWS「Creating Amazon Route 53 health checks」
- AWS「Types of Amazon Route 53 health checks」(エンドポイント監視・計算ヘルスチェックの種類)
練習問題(全5問)
正解:可用性が
AWS公式ドキュメントは、
正解:パブリックホストゾーンは
AWS公式ドキュメントに
正解:ゾーンの
AWS公式ドキュメントに
正解:1/256
AWS公式ドキュメントの
正解:プライマリの
AWS公式ドキュメントに
選んでから「採点する」を押すと、解説つきで答え合わせができます。