目次
12 章

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 を打つと、次が起こります。

DNS 解決 (resolution) の流れ
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エンドポイントのモニタリング。ルーティングポリシーと連動
ResolverVPC の中での DNS 解決 (あまり触らない)

ドメイン登録 vs Hosted Zone #

よく混同する部分です。ドメインをどこで買ったか(Registrar)と、DNS をどこで解決するか(Hosted Zone)は別物です。

Gabia で買ったドメインの DNS を Route 53 で解決するパターン
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 へ移す手順は次のとおりです。

  1. Route 53 に Public Hosted Zone を作ります。自動で4つの NS が付与されます。
  2. その NS 4つを Registrar コンソールの NS 項目に入力します。
  3. 伝播を待ちます(数分 ~ 24時間)。
  4. dig や nslookup で確認します。

Hosted Zone の種類 #

Public Hosted Zone #

インターネットのどこからでも解決できる DNS です。一般的な公開 DNS です。

Public Hosted Zone を作る
aws route53 create-hosted-zone \
  --name example.com \
  --caller-reference $(date +%s)

Private Hosted Zone #

VPC の中だけで解決される DNS です。内部のサービスディスカバリに使います。

Private Hosted Zone の構成
内部ドメイン: api.internal.example.com → 10.0.10.100 (アプリ EC2)
                db.internal.example.com → RDS endpoint

VPC の EC2 だけが解決でき、インターネットからは解決されません。社内マイクロサービスに滑らかです。

レコードの種類 #

A / AAAA — ドメインを IP に #

最も基本の構成です。

A / AAAA レコード
A     api.example.com.    300   192.0.2.10        (IPv4)
AAAA  api.example.com.    300   2001:db8::10      (IPv6)

CNAME — ドメインをドメインに #

別のドメインの別名です。

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 の限界を迂回します。

Alias の構造
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 レコード
MX  example.com.   300   10 inbound-smtp.us-east-1.amazonaws.com.
                          20 inbound-smtp.us-east-2.amazonaws.com.

1020 は優先順位で、小さい値が優先です。SES / Google Workspace / Microsoft 365 の SMTP ホストを指します。

TXT — テキスト #

ドメイン検証 / SPF / DKIM などに使います。

TXT のよくある用途
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 — Amazon ACM だけを許可
CAA  example.com.  300  0 issue "amazon.com"

ACM(第13章)で証明書を発行するときに CAA が塞がれていると失敗するので注意します。

ルーティングポリシー — Route 53 の本当の魅力 #

同じドメインに複数の IP を異なる条件で応答できます。

Simple Routing #

最も単純です。1つのドメインを1個または複数の IP へ送ります。複数 IP のときはラウンドロビンです。

Weighted Routing — 比重の分散 #

各レコードに重みを置いて比率で分けます。カナリアデプロイに有用です。

Weighted ルーティング — v1 90% / v2 10%
A   api.example.com   ALIAS   alb-v1.elb...   weight=90
A   api.example.com   ALIAS   alb-v2.elb...   weight=10

Latency Routing — 近いリージョンへ #

複数のリージョンに同じサービスを立ち上げ、ユーザーを最も近いリージョンへルーティングします。

Latency ルーティング
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 へ送ります。

Failover ルーティング — DR 構成
A   api.example.com   ALIAS   alb-prod-seoul...   PRIMARY   health-check=HC1
A   api.example.com   ALIAS   alb-dr-tokyo...     SECONDARY

Geolocation Routing — 国 / 大陸別 #

ユーザーの地理的位置でルーティングします。コンプライアンスやコンテンツの違いに使います。

Geolocation 構成
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 レベルの負荷分散 → Multivalue

Health Check #

ルーティングポリシーの核心となる相棒です。エンドポイントが生きているかを30秒ごとにチェックします。

Health Check を作る
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 のフィルターです。単独でも使えますが、通常はルーティングポリシーと結合します。

ドメイン運用 — よく使うパターン #

メインサイト + サブドメイン #

example.com の一般的なセットアップ
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 の項目を抜かすと、解決自体が壊れます。

練習問題 #

  1. 自分のドメインを別の登録業者で買ったと仮定し、その DNS を Route 53 へ移す4段階を §「ドメイン登録 vs Hosted Zone」を見ずに書いてみてください。そのうちどの段階を抜かすと §「よく出会う落とし穴」の最初の項目になるかを表示してください。
  2. ルートドメイン example.com を CloudFront ディストリビューションに接続しようとしています。CNAME ができない理由と Alias ができる理由を §「CNAME」と §「Alias」を根拠に一段落で説明し、その Alias が 第14章 CloudFront のディストリビューションをどう指すかを一行付け加えてください。
  3. ソウルと東京に同じサービスを置き、片方のリージョンが死んだら別のリージョンへ移そうとしています。§「ルーティングポリシー」の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 の運用パターンを整理します。

X