AWS CLIでRoute53にCloudfrontのエイリアスレコードを作ろうした時にハマった話
自分で作ったサイトで描画用のjsなどをCloudfrontで公開していますが、
この時に少々ハマったお話です。
タイトルの通り、AWS CLIでRoute53にCloudfrontのエイリアスレコードを作ろうとした時にエラーの原因がわからずかなり悩みました。
下記のようなjsonファイルを作リました。
{
"Comment": "Creating Alias resource record sets in Route 53",
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "elb.example.com",
"Type": "A",
"AliasTarget":{
"HostedZoneId": "ZXXXXXXXXXX",
"DNSName": "xxxxxxxxxxxxx.cloudfront.net",
"EvaluateTargetHealth": false
}}
}]
}
これを引数にしてコマンドを実行します。
$ aws route53 change-resource-record-sets --hosted-zone-id ZXXXXXXXXXX --change-batch file://sample.json
ZXXXXXXXXXXはRoute53のホストゾーンIDです。
この時点でコマンドパラメータでホストゾーンIDを指定してるのに、jsonでも指定するのかとは思っていましたが、とりあえず実行。
下記のようなエラーが出ました。
An error occurred (InvalidChangeBatch) when calling the ChangeResourceRecordSets operation: [Tried to create an alias that targets xxxxxxxxxxxxx.cloudfront.net., type A in zone ZXXXXXXXXXX, but the alias target name does not lie within the target zone, Tried to create an alias that targets xxxxxxxxxxxxx.cloudfront.net., type A in zone ZXXXXXXXXXX, but that target was not found]
どうやら、指定したホストゾーンIDにはxxxxxxxxxxxxx.cloudfront.netがないと言っているようです。
と言われましても・・・
そもそもCloudfrontにホストゾーンIDなんか聞いたことがないので、何のことやら・・・・
ということで、awsの公式ドキュメントをもう一度目を皿のようにして読んだところ・・・ありました!
AWS::Route53::RecordSet AliasTarget
Specify Z2FDTNDATAQYW2. This is always the hosted zone ID when you create an alias record that routes traffic to a CloudFront distribution.
なんと・・・まさかの「固定値」でした。
Cloudfrontを指定する場合はホストゾーンIDは上記値をバチッと書いちゃうのが正解だそうです。
ですから、前述のjsonはこうなります。
{
"Comment": "Creating Alias resource record sets in Route 53",
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "elb.example.com",
"Type": "A",
"AliasTarget":{
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "xxxxxxxxxxxxx.cloudfront.net",
"EvaluateTargetHealth": false
}}
}]
}
修正したところ正常終了を確認できました。
ホストゾーンIDが固定値なのはCloudfrontがグローバルサービスだからだと思います。
少々分かりづらいので本記事が何かのお役に立てればと思います。
Discussion