こんにちは。Kaneyasuです。
本記事は過去にZennで書いた記事のリライトです。
CloudFrontで作ったディストリビューションは、Route53にエイリアスレコードを作ることで、独自ドメインでアクセス可能になります。
Route53にエイリアスレコードを作る作業は、AWS CLIやAWS CloudFormationでコード化できますが、一点わかりにくいポイントがあるので、共有します。
AWS CLIの場合
AWS CLIでRoute53にDNSレコードを作るには、aws route53 change-resource-record-sets
を使用します。
aws route53 change-resource-record-sets
コマンドはパラメーターとして、ホストゾーンIDとDNSレコードの内容を記載してJSONファイルを渡す仕様です。
aws route53 change-resource-record-sets --hosted-zone-id {Route53のホストゾーンID} --change-batch file://sample.json
ホストゾーンIDは、aws route53 list-hosted-zones
コマンドで調べることができます。
DNSレコードの内容を記載するJSONファイルのサンプルはこちらです。
記載方法は、上述のaws route53 change-resource-record-sets
のリファレンスのページに例があります。
{
"Comment": "Creating Alias resource record sets in Route 53",
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "cdn.example.com",
"Type": "A",
"AliasTarget":{
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "xxxxxxxxxxxxx.cloudfront.net",
"EvaluateTargetHealth": false
}}
}]
}
このJSONファイルには、CloudFrontのディストリビューションに対し、エイリアスレコードを新規作成することを書いています。
冒頭で書いた「わかりにくいポイント」とはここのことです。
"HostedZoneId": "Z2FDTNDATAQYW2",
CloudFrontのディストリビューションに対し、エイリアスレコードを作る場合は、ホストゾーンIDに固定値Z2FDTNDATAQYW2
を書くのが仕様です。
IDを指定する欄で、固定値を書くと言うのは珍しいですが、本当にこういう仕様です。
CloudFront distribution
Specify Z2FDTNDATAQYW2. This is always the hosted zone ID when you create an alias record that routes traffic to a CloudFront distribution.
AWS CloudFormationの場合
こちらはAWSのリファレンスページに正解が載っています。
やはりホストゾーンIDに固定値Z2FDTNDATAQYW2
が書かれています。
ChatGPTに問い合わせた場合
2023年9月現在、ChatGPTにCloudFrontで作ったディストリビューションは、Route53にエイリアスレコードを作りたいと問い合わせれば、ホストゾーンIDに固定値を書くのも含めたサンプルが返ってきます。
"HostedZoneId": "Z2FDTNDATAQYW2", # CloudFrontのHostedZoneID
ただし、ChatGPTの回答は「CloudFrontのHostedZoneID」という若干わかりづらい表現をしています。
大丈夫なのですが、初見だと誤解する可能性があると感じます。
この部分の裏取りの一助となればいいなあと、本記事を書きました。
参考になれば幸いです。