🍥

CDK で CloudFront への Aレコードを作ろうとしたら Template error と言われた

2022/03/11に公開

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)
            ),
        })

https://github.com/aws/aws-cdk/issues/8406#issuecomment-789954129

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