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 が変わり、レジストラ側の再設定が必要になる。
- ホストゾーンはゾーン単位で課金。 検証用に乱立させたゾーンは消し忘れない。
まとめ
- ホストゾーンを用意する(Route 53 取得なら自動、外部取得なら作成+NS 委任)
- ALIAS / CNAME などのレコードを設定する
- ACM(DNS 検証)で HTTPS を有効化する
- 必要に応じてルーティングポリシーとヘルスチェックを足す
「AWS リソース向けには ALIAS」「証明書は DNS 検証」「CloudFront は us-east-1」の 3 点を押さえておけば、大きくハマらずにドメイン設定を終えられます。
