Route 53 — ドメインと DNS
AWS のマネージド DNS である Route 53。ドメイン登録と Hosted Zone、A / AAAA / CNAME / Alias レコードの違い、そして Simple / Failover / Latency / Geolocation ルーティングポリシーまで整理します。
第11章 RDS までバックエンドのコンピューティング / ストレージ / DB 領域をつかみました。本章は、ユーザーが私たちのシステムに初めて出会う地点である DNS です。AWS のマネージド DNS が Route 53 で、名前は DNS が使う 53 番ポートから取りました。
本章では DNS の全体像から始め、Route 53 の構造、レコードの種類(特に Alias)、ルーティングポリシー、ヘルスチェックまでひと通り整理します。ここで作る Alias レコードは、第13章 ALB / NLB と ACM のロードバランサーと 第14章 CloudFront のディストリビューションをドメインに接続する最後のピースになります。
DNS の動作 — 5秒の復習 #
DNS は example.com を IP にマッピングする機能です。ブラウザが example.com を打つと、次が起こります。
1. ブラウザ: `example.com` のキャッシュを確認 → なし
2. OS: `/etc/hosts` → なし
3. OS: システム DNS resolver (通常はルーター、または 1.1.1.1)
4. resolver: キャッシュを確認 → なし → root → .com TLD → example.com の NS
5. example.com の NS = Route 53 → A レコード → 192.0.2.10
6. 応答が逆に戻ってきてキャッシュこの図の5番の地点、つまりドメインの権威ある(authoritative)DNS が Route 53 です。
TTL の意味 #
各レコードには TTL (Time To Live) が付きます。resolver とブラウザがどれだけキャッシュするかを決めます。
| TTL | 意味 |
|---|---|
| 30 ~ 60 秒 | よく変わる場合 (failover の速い回復) |
| 300 秒 (5分) | 運用の一般値 |
| 86400 (1日) | ほぼ変わらない NS / SOA |
TTL が長ければ応答が速く費用が少ないですが、変更が全世界に広がる時間も長くなります。運用の cutover の時点では、TTL をあらかじめ短くしておくのが一般的です。
Route 53 の構造 #
Route 53 の構成要素は次のとおりです。
| 構成要素 | 説明 |
|---|---|
| Domain Registration | ドメイン登録 / 移転 (任意)。他の登録業者(Gabia、GoDaddy など)も可能 |
| Hosted Zone | ドメインの権威ある DNS 設定。核心となる構成要素 |
| Health Check | エンドポイントのモニタリング。ルーティングポリシーと連動 |
| Resolver | VPC の中での DNS 解決 (あまり触らない) |
ドメイン登録 vs Hosted Zone #
よく混同する部分です。ドメインをどこで買ったか(Registrar)と、DNS をどこで解決するか(Hosted Zone)は別物です。
Gabia (Registrar):
example.com の NS = ns-1234.awsdns-56.com ← Route 53 NS に指定
ns-2345.awsdns-67.org
ns-3456.awsdns-78.net
ns-4567.awsdns-89.co.uk
Route 53 Hosted Zone:
example.com.
NS ns-1234... (自動生成)
SOA ... (自動生成)
A www → 192.0.2.10
A api → 198.51.100.20他の場所で買ったドメインを Route 53 へ移す手順は次のとおりです。
- Route 53 に Public Hosted Zone を作ります。自動で4つの NS が付与されます。
- その NS 4つを Registrar コンソールの NS 項目に入力します。
- 伝播を待ちます(数分 ~ 24時間)。
- dig や nslookup で確認します。
Hosted Zone の種類 #
Public Hosted Zone #
インターネットのどこからでも解決できる DNS です。一般的な公開 DNS です。
aws route53 create-hosted-zone \
--name example.com \
--caller-reference $(date +%s)Private Hosted Zone #
VPC の中だけで解決される DNS です。内部のサービスディスカバリに使います。
内部ドメイン: api.internal.example.com → 10.0.10.100 (アプリ EC2)
db.internal.example.com → RDS endpointVPC の EC2 だけが解決でき、インターネットからは解決されません。社内マイクロサービスに滑らかです。
レコードの種類 #
A / AAAA — ドメインを IP に #
最も基本の構成です。
A api.example.com. 300 192.0.2.10 (IPv4)
AAAA api.example.com. 300 2001:db8::10 (IPv6)CNAME — ドメインをドメインに #
別のドメインの別名です。
CNAME www.example.com. 300 example.com.
CNAME blog.example.com. 300 ghs.googlehosted.com.制限は次のとおりです。
- ルートドメイン(
example.com自体)には CNAME ができません(DNS 標準の限界)。 - CNAME があると他のレコード(MX、TXT のような)と共存できません。
ルートドメインを ALB や CloudFront へ送りたいときに CNAME が使えません。このとき Alias が登場します。
Alias — Route 53 だけの構造 #
Alias は Route 53 が作った非標準のレコードです。DNS 応答の時点では A / AAAA のように IP を返します。CNAME の限界を迂回します。
A example.com. ALIAS d111111abcdef8.cloudfront.net (CloudFront)
A www.example.com. ALIAS my-alb-1234567890.elb.amazonaws.com (ALB)
A shop.example.com. ALIAS my-bucket.s3-website-ap-northeast-2.amazonaws.com (S3)特徴は次のとおりです。
- ルートドメインでも使えます。
- 無料です(CNAME はクエリあたり課金ですが、Alias は AWS リソースを指せば無料です)。
- 自動 IP 更新 — ALB と CloudFront は IP が動的ですが、Alias が追従します。
Alias は AWS リソースだけを指せます(ALB、NLB、CloudFront、API Gateway、S3 website、同じ zone の他のレコードなど)。外部ドメインは CNAME を使わなければなりません。
MX — メール #
MX example.com. 300 10 inbound-smtp.us-east-1.amazonaws.com.
20 inbound-smtp.us-east-2.amazonaws.com.10、20 は優先順位で、小さい値が優先です。SES / Google Workspace / Microsoft 365 の SMTP ホストを指します。
TXT — テキスト #
ドメイン検証 / SPF / DKIM などに使います。
TXT example.com. 300 "v=spf1 include:_spf.google.com ~all"
TXT _dmarc.example.com. 300 "v=DMARC1; p=quarantine; rua=mailto:..."
TXT _acme-challenge.example.com. 300 "lemonjuice123..." (Let's Encrypt 検証)NS / SOA — 自動 #
Hosted Zone を作るときに自動生成されます。ほぼ触りません。
CAA — 証明書発行の権限 #
どの CA がこのドメインの証明書を発行できるかを制限します。
CAA example.com. 300 0 issue "amazon.com"ACM(第13章)で証明書を発行するときに CAA が塞がれていると失敗するので注意します。
ルーティングポリシー — Route 53 の本当の魅力 #
同じドメインに複数の IP を異なる条件で応答できます。
Simple Routing #
最も単純です。1つのドメインを1個または複数の IP へ送ります。複数 IP のときはラウンドロビンです。
Weighted Routing — 比重の分散 #
各レコードに重みを置いて比率で分けます。カナリアデプロイに有用です。
A api.example.com ALIAS alb-v1.elb... weight=90
A api.example.com ALIAS alb-v2.elb... weight=10Latency Routing — 近いリージョンへ #
複数のリージョンに同じサービスを立ち上げ、ユーザーを最も近いリージョンへルーティングします。
A api.example.com ALIAS alb-seoul... region=ap-northeast-2
A api.example.com ALIAS alb-tokyo... region=ap-northeast-1
A api.example.com ALIAS alb-virginia...region=us-east-1韓国のユーザーはソウルへ、日本のユーザーは東京へ、米国のユーザーはバージニアへ行きます。
Failover Routing — 自動フェイルオーバー #
Primary と Secondary の2つの対象を置き、Primary が health check に失敗すると Secondary へ送ります。
A api.example.com ALIAS alb-prod-seoul... PRIMARY health-check=HC1
A api.example.com ALIAS alb-dr-tokyo... SECONDARYGeolocation Routing — 国 / 大陸別 #
ユーザーの地理的位置でルーティングします。コンプライアンスやコンテンツの違いに使います。
A api.example.com ALIAS alb-kr... geolocation=KR (Korea)
A api.example.com ALIAS alb-jp... geolocation=JP (Japan)
A api.example.com ALIAS alb-default... geolocation=DEFAULT (それ以外)Geoproximity Routing #
地理に bias を加えます。AWS 内部のアルゴリズムがより複雑です。ほぼ触りません。
Multivalue Answer Routing #
複数の IP をランダムに応答します。Health check と結合して、生きている IP だけを返します。単純なクライアント側の負荷分散です。
ポリシー決定ガイド #
1つだけなら → Simple
デプロイの比重を分けたい → Weighted
複数リージョンのうち近い場所 → Latency
DR / バックアップ用途 → Failover
国単位のコンプライアンス → Geolocation
DNS レベルの負荷分散 → MultivalueHealth Check #
ルーティングポリシーの核心となる相棒です。エンドポイントが生きているかを30秒ごとにチェックします。
aws route53 create-health-check \
--caller-reference $(date +%s) \
--health-check-config '{
"Type": "HTTPS",
"FullyQualifiedDomainName": "api.example.com",
"ResourcePath": "/health",
"Port": 443,
"RequestInterval": 30,
"FailureThreshold": 3
}'種類は次のとおりです。
- HTTP / HTTPS / TCP — 直接エンドポイントをチェックします。
- Calculated — 他の health check の AND / OR の組み合わせです。
- CloudWatch Alarm ベース — アラームの状態で判断します。
Health Check は Failover ルーティングの自動切り替えトリガーであり、Multivalue ルーティングの生きている IP のフィルターです。単独でも使えますが、通常はルーティングポリシーと結合します。
ドメイン運用 — よく使うパターン #
メインサイト + サブドメイン #
A example.com. ALIAS www.example.com. (root → www)
A www.example.com. ALIAS d111...cloudfront.net
A api.example.com. ALIAS alb-prod...elb.amazonaws.com
A app.example.com. ALIAS d222...cloudfront.net
TXT _dmarc.example.com. "v=DMARC1; p=reject; ..."
MX example.com. 10 inbound-smtp.ses-us-east-1.amazonaws.com.環境別の分離 #
api.dev.example.com ← dev 環境 ALB
api.staging.example.com ← staging
api.example.com ← prodまたは別の Hosted Zone で dev.example.com を置くこともできます。権限委任がきれいになります。
Apex (ルート) ドメインの ALB / S3 #
CNAME が使えない場合は Alias を使います。ALB の zone が自動でマッチします(コンソールでドロップダウン)。
費用 #
| 項目 | 費用 |
|---|---|
| Hosted Zone | $0.50 / 月 (最初の25個) |
| クエリ (標準) | $0.40 / 百万 |
| クエリ (遅延 / ジオなどのポリシー) | $0.60 / 百万 |
| Health Check (AWS エンドポイント) | $0.50 / 月 |
| Health Check (外部 / HTTPS) | $0.75 / 月 + オプション |
| ドメイン登録 | TLD 別 $9 ~ / 年 |
小さなサイトは月 $1 ~ 2 のレベルです。
よく出会う落とし穴 #
- NS を変更していないのに Route 53 だけ触る — Hosted Zone を作ったが Registrar の NS が依然として旧値なら、変更がまったく反映されません。NS 4つを Registrar に入力したかを
dig NS example.com +shortで確認します。 - Apex CNAME を試す —
example.com CNAME myapp.heroku.comは拒否されます。Alias は AWS リソースだけを指します。外部サービスがルートドメインに来る必要があるなら、そのサービスが ALIAS 類の機能を提供するか(例: CloudFlare CNAME flattening)、別途リダイレクタ(S3 redirect で Apex を www へ)のパターンを使います。 - TTL が長すぎて cutover が遅くなる — 運用の cutover(例: ALB の交換)直前には TTL を60秒程度に下げ、安定後に再び上げます。あらかじめ下げないと、旧 IP が24時間キャッシュされることがあります。
- Health Check が false positive — チェック経路が認証を要求すると、常に 401 が出て unhealthy になります。
/healthのような公開エンドポイントを置きます。 - Failover なのに health check を付けない — PRIMARY レコードに health check がなければ自動フェイルオーバーが行われません。コンソールの「evaluate target health」オプションを抜かすミスがよくあります。
- DNSSEC を ON にして忘れる — DNSSEC の KSK / ZSK のローテーションを忘れると、ドメイン解決自体が失敗します。ON にする場合は慎重に自動化と一緒に行います。
- Private Hosted Zone の解決が VPC でできない — VPC の
enableDnsHostnames/enableDnsSupportが OFF だと、Private Hosted Zone が解決されません。両方がtrueかを確認します。 - MX の優先順位の文法ミス —
MX 10 mail.example.com.で10の項目を抜かすと、解決自体が壊れます。
練習問題 #
- 自分のドメインを別の登録業者で買ったと仮定し、その DNS を Route 53 へ移す4段階を §「ドメイン登録 vs Hosted Zone」を見ずに書いてみてください。そのうちどの段階を抜かすと §「よく出会う落とし穴」の最初の項目になるかを表示してください。
- ルートドメイン
example.comを CloudFront ディストリビューションに接続しようとしています。CNAME ができない理由と Alias ができる理由を §「CNAME」と §「Alias」を根拠に一段落で説明し、その Alias が 第14章 CloudFront のディストリビューションをどう指すかを一行付け加えてください。 - ソウルと東京に同じサービスを置き、片方のリージョンが死んだら別のリージョンへ移そうとしています。§「ルーティングポリシー」の7つのうちどれを選ぶべきか、そして §「Health Check」がなぜ一緒に必要かを書いてみてください。
一行まとめ: Route 53 はマネージド DNS で、ドメインをどこで買ったか(Registrar)と DNS をどこで解決するか(Hosted Zone)は別物であり、Registrar の NS を Route 53 NS に指すのが始まりです。Alias は Route 53 だけのレコードでルートドメインでも使え、AWS リソースを指せば無料です。ルーティングポリシー7つのうち Failover と Multivalue は Health Check が自動切り替えトリガーになります。
次の章 #
DNS の全体像はつかめました。次の 第13章 ALB / NLB と ACM では、そのドメインが指す先であるロードバランサーと HTTPS へつながります。ALB / NLB / GWLB の違い、Listener / Target Group / Health Check の流れ、ACM の証明書発行と自動更新、HTTPS の運用パターンを整理します。