🍥
CDK で CloudFront への Aレコードを作ろうとしたら Template error と言われた
Template error: Mapping named 'AWSCloudFrontPartitionHostedZoneIdMap' is not present in the 'Mappings' section of template.
以下のようにスタックを分割していました (一部省略)
- Certificate (証明書発行 API Gateway 用と CloudFront 用)
- HostedZone (手動で作成したホストゾーンを取得するだけ)
- ApiGateway (API Gateway を構築する)
- Dns (API Gateway, CloudFront へのエイリアスレコードをホストゾーンへ設定)
- CloudFront (CloudFront ディストリビューションを構築する)
この状態では冒頭のエラーメッセージが発生していました
該当の箇所は以下の通りです
new ARecord(this, 'CloudFrontAliasRecord', {
zone: props.hostedZoneStack.hostedZone,
recordName: getCloudFrontFQDN(),
target: RecordTarget.fromAlias(
new CloudFrontTarget(props.cloudFrontStack.cloudFrontDistribution)
),
})
aws-cdk の GitHub issue に同じような問題がコメントされていたので参考にしてみました
上記コメントから引用
Problem solved! 🎊
The issue was that I can't create a record alias for a Cloudfront distribution from another stack, they have to be in the same stack. The missing "Mappings" section was actually created in the CloudfrontStack template, so the Route53Stack template couldn't find it in its own template. ✅
別のスタックから CloudFront ディストリビューションへのエイリアスレコードは作成できない、ということらしいので
CloudFront (CloudFront ディストリビューションを構築する)
こちらのスタックに new ARecord
を移動したところ、エラー無く正しくデプロイできました
Discussion