Route 53 でドメインを設定する

AWS 上で動かしているサービスに独自ドメインを割り当てるとき、仕上げになるのが Amazon Route 53 の設定です。本記事では、ドメインの取得(または外部レジストラからの委任)、ホストゾーンの作成、ALIAS / CNAME レコードの設定、ACM 証明書による HTTPS 化までを、コンソールと AWS CLI の両方でハンズオン形式にまとめます。

対象環境

  • Route 53 / ACM を操作できる IAM 権限を持つ AWS アカウント
  • AWS CLI v2(CLI を使う場合)
  • 公開対象のリソース(CloudFront / ALB / S3 静的サイトなど)
  • 例として example.com を使用

Route 53 の基本構成

Route 53 の登場人物は大きく 3 つです。

  • ドメイン登録(Registered domains) — ドメインそのものの取得・更新を管理する
  • ホストゾーン(Hosted zones) — そのドメインの DNS レコードをまとめた入れ物
  • レコード(Records) — A / AAAA / CNAME / ALIAS / MX / TXT などの実体

「ドメインは外部レジストラで取得済みで、DNS だけ Route 53 に任せたい」というケースも多いため、本記事では両パターンを扱います。

手順1: Route 53 でドメインを新規取得する場合

Route 53 コンソール →「ドメインの登録」から希望のドメイン名を検索し、利用可能なら購入します。購入すると自動的に同名のパブリックホストゾーンが作成され、NS レコードもドメインに紐づいた状態になります。追加の委任設定は不要で、すぐにレコードを足していけます。

aws route53 list-hosted-zones \
  --query "HostedZones[].{Name:Name,Id:Id}" \
  --output table

手順2: 外部レジストラのドメインを Route 53 で管理する場合

2-1. パブリックホストゾーンを作成する

aws route53 create-hosted-zone \
  --name example.com \
  --caller-reference "$(date +%s)"

作成すると、そのゾーン固有の NS レコード(ネームサーバ 4 本)が払い出されます。

aws route53 get-hosted-zone --id /hostedzone/ZXXXXXXXXXXXXX \
  --query "DelegationSet.NameServers"

出力例(値はゾーンごとに異なります):

[
  "ns-123.awsdns-45.com",
  "ns-678.awsdns-90.net",
  "ns-234.awsdns-56.org",
  "ns-789.awsdns-01.co.uk"
]

2-2. レジストラ側のネームサーバを書き換える

取得元レジストラの管理画面で、そのドメインのネームサーバを上記 4 本に置き換えます。これで DNS の問い合わせが Route 53 に委任されます。反映には数分〜最大 48 時間かかります。

dig NS example.com +short

Route 53 の 4 本が返ってくれば委任完了です。

手順3: レコードを設定する

3-1. ALIAS レコード(AWS リソース向けの推奨)

CloudFront / ALB / S3 ウェブサイトエンドポイントに向ける場合は、CNAME ではなく ALIAS レコードを使います。ALIAS は Apex ドメイン(example.com そのもの)にも設定でき、名前解決の追加課金もありません。

cat > change-batch.json <<'JSON'
{
  "Comment": "apex to CloudFront",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "example.com",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "Z2FDTNDATAQYW2",
          "DNSName": "d111111abcdef8.cloudfront.net",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
JSON

aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXXXXXXXXXXXX \
  --change-batch file://change-batch.json

> CloudFront の ALIAS では HostedZoneId に CloudFront 固定値 Z2FDTNDATAQYW2 を指定します。ALB の場合は各リージョンの ELB 用ゾーン ID を指定する点に注意してください。

3-2. 一般的なレコード(CNAME など)

cat > www.json <<'JSON'
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "www.example.com",
        "Type": "CNAME",
        "TTL": 300,
        "ResourceRecords": [{ "Value": "example.com" }]
      }
    }
  ]
}
JSON

aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXXXXXXXXXXXX \
  --change-batch file://www.json

手順4: ACM 証明書で HTTPS 化する

CloudFront や ALB で HTTPS を使うには ACM 証明書が必要です。DNS 検証を選ぶと、検証用 CNAME を Route 53 に追加するだけで自動更新まで回ります。

> CloudFront で使う証明書は バージニア北部(us-east-1) で発行する必要があります。ALB は使うリージョンで発行します。

aws acm request-certificate \
  --domain-name example.com \
  --subject-alternative-names "*.example.com" \
  --validation-method DNS \
  --region us-east-1

発行された ARN から検証用 CNAME を取得します。

aws acm describe-certificate \
  --certificate-arn arn:aws:acm:us-east-1:111122223333:certificate/xxxxxxxx \
  --region us-east-1 \
  --query "Certificate.DomainValidationOptions[].ResourceRecord"

返ってきた Name / Value を CNAME として Route 53 に UPSERT すれば、数分で ISSUED になります。ACM コンソールの「Route 53 にレコードを作成」ボタンでも同じことができます。

手順5: ルーティングポリシーの活用(任意)

Route 53 は単純な名前解決以上のことができます。

  • 加重(Weighted) — 新旧環境へのトラフィックを比率で振り分け、段階的な切り替えに使う
  • フェイルオーバー(Failover) — ヘルスチェックと組み合わせ、障害時にセカンダリへ切り替える
  • レイテンシー(Latency) — 複数リージョン構成で、ユーザーに近い方へ誘導する
aws route53 create-health-check \
  --caller-reference "$(date +%s)" \
  --health-check-config '{
    "Type": "HTTPS",
    "FullyQualifiedDomainName": "example.com",
    "Port": 443,
    "ResourcePath": "/health",
    "RequestInterval": 30,
    "FailureThreshold": 3
  }'

確認方法

# A/ALIAS の解決確認
dig example.com +short

# CNAME の確認
dig www.example.com +short

# Route 53 側のレコード一覧
aws route53 list-resource-record-sets \
  --hosted-zone-id ZXXXXXXXXXXXXX \
  --query "ResourceRecordSets[].{Name:Name,Type:Type}" \
  --output table

# HTTPS の到達と証明書確認
curl -I https://example.com

dig の応答が期待どおりで、curl -I が 200 系かつ証明書エラーが出なければ完了です。

注意点

  • 委任の浸透には時間がかかる。 ネームサーバ変更直後は旧レコードがキャッシュされているため、TTL を考慮して待つ。権威サーバを直指定(dig @ns-123.awsdns-45.com example.com)すると早く確認できる。
  • CNAME は Apex に設定できない。 example.com 自体には ALIAS(または A)を使う。
  • CloudFront 用証明書は必ず us-east-1。 リージョンを間違えると CloudFront のディストリビューション設定で証明書が選べない。
  • ホストゾーンを作り直すと NS が変わる。 一度委任したゾーンを削除・再作成すると NS が変わり、レジストラ側の再設定が必要になる。
  • ホストゾーンはゾーン単位で課金。 検証用に乱立させたゾーンは消し忘れない。

まとめ

  1. ホストゾーンを用意する(Route 53 取得なら自動、外部取得なら作成+NS 委任)
  2. ALIAS / CNAME などのレコードを設定する
  3. ACM(DNS 検証)で HTTPS を有効化する
  4. 必要に応じてルーティングポリシーとヘルスチェックを足す

「AWS リソース向けには ALIAS」「証明書は DNS 検証」「CloudFront は us-east-1」の 3 点を押さえておけば、大きくハマらずにドメイン設定を終えられます。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。