要设置 AliasTarget,您实际上只需为 DNSName 参数提供 CloudFront DNS 名称,而不是分配 ID。你可以这样做:
!GetAtt WebAppCloudFrontDistribution.DomainName
我假设 WebAppCloudFrontDistribution 是模板中 AWS::CloudFront::Distribution 资源的逻辑 ID,而不是参数。如果这实际上是一个参数,只需将该参数的值设置为在 CloudFront 的 AWS 控制台控制面板中为分配列出的 DNS 名称。
您还需要在模板中修复一些其他内容:
- HostedZoneName 应该是 Route53 托管区域的名称,而不是您要使用的 FQDN。就个人而言,我更喜欢使用 AWS::Route53::RecordSet 资源的 HostedZoneId 属性,因为它更清楚该属性的含义是什么,但每个人都有自己的含义。(注意:AWS::Route53::RecordSet 资源的 HostedZoneId 属性应该是您的托管区域的 HostedZoneId,而不是与 AliasTarget HostedZoneId 相同的值。)
- Name 应该是您希望成为 CloudFront 分配资源的 CNAME 的 DNS 名称。
- 我知道这有点奇怪,但是对于别名目标,您必须将类型设置为“A”(对于 IPv4)或“AAAA”(IPv6)。我建议两者都做 - 您可以通过创建 AWS::Route53::RecordSet 资源的副本来做到这一点,但将类型设置为“AAAA”而不是“A”。
最后,请注意,为了使其正常工作,您还需要确保将 FQDN 添加为 CloudFront 分发资源的备用名称 - 您可以使用“DistributionConfig”属性的“Aliases”属性进行设置在您的模板中分配资源,或者如果您没有在此模板中创建资源,则通过手动配置 AWS 控制台中的分配设置。