如何使用CloudFormation创建Route53记录及了解HostedZone相关参数
AWS::Route53::RecordSet参数说明
前置资源要求
创建AWS::Route53::RecordSet资源前,必须提前创建Route53托管区域(Hosted Zone),你提到的两个参数都来自该托管区域资源。你既可以在同一个CloudFormation模板中创建Hosted Zone资源后直接引用,也可以传入账号下已存在的托管区域的对应属性值。
两个参数的具体含义
HostedZoneId
- 是Route53为每个托管区域分配的全局唯一标识符,格式示例:
Z00111112A3BCDE4FGHIJ - 若在同模板创建Hosted Zone,可直接通过
!Ref <托管区域资源名>获取该值;若使用已存在的托管区域,可在Route53控制台对应托管区域的详情页查询到该ID - 特殊场景:如果要创建指向S3静态网站、CloudFront分发、Global Accelerator实例等AWS资源的别名记录,需要使用对应服务官方公布的固定HostedZoneId值
HostedZoneName
- 就是创建托管区域时填写的根域名,比如你要管理
example.com下的所有DNS记录,托管区域的名称就是example.com - DNS规范要求完整域名末尾带点(完全限定域名格式),CloudFormation会自动补全末尾的点,你传入不带点的域名也可正常识别
- 注意:
HostedZoneId和HostedZoneName两个参数二选一填写即可,不需要同时传入;如果同时传,两者必须对应同一个托管区域,否则会抛出参数不匹配的创建错误
简化写法示例
你提供的模板中同时引用了两个参数,完全可以删去其中一个,同模板创建托管区域的参考写法如下:
# 同模板提前创建托管区域 MyHostedZone: Type: AWS::Route53::HostedZone Properties: Name: "example.com" # 创建DNS记录 Record: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref MyHostedZone # 直接引用同模板托管区域资源,无需额外配置参数 Comment: DNS name for my instance. Name: !Sub "${Subdomain}.example.com" Type: CNAME TTL: 300 ResourceRecords: - !GetAtt MyEC2Instance.PublicDnsName
内容的提问来源于stack exchange,提问作者ozil
相关产品推荐
相关产品推荐

