我想为子域创建Route53托管区域,并为父域创建NS
记录。
我们说我有:
example.com
我想要一个子域的托管区域:
build.example.com
托管区域创建工作:
ClusterHostedZone:
Type: "AWS::Route53::HostedZone"
Properties:
Name: !Ref DomainName
HostedZoneConfig:
Comment: Managed by Cloud Formation
HostedZoneTags:
- Key: KubernetesCluster
Value: !Ref KubernetesCluster
委派子域名负责人
ParentHostedZoneClusterRecord:
Type: "AWS::Route53::RecordSet"
Properties:
Name: !Ref DomainName
Comment: Managed by Cloud Formation
HostedZoneId: !Ref ParentHostedZoneID
TTL: 30
Type: NS
ResourceRecords: !GetAtt ClusterHostedZone.NameServers
这没有实现,我也不知道如何获取此信息:
ResourceRecords: !GetAtt ClusterHostedZone.NameServers
Cloud Formation中是否缺少这个简单的功能?
答案 0 :(得分:3)
这对我来说很有用,也许你的模板不起作用,因为你没有指定DependsOn
,并且没有按顺序创建资源。
stagingHostedZone:
Type: 'AWS::Route53::HostedZone'
Properties:
HostedZoneConfig:
Comment: Hosted zone for staging environment
Name: staging.example.com
nsRootHostedZoneRecordSet:
Type: 'AWS::Route53::RecordSet'
Properties:
HostedZoneId: Z25*********
Name: staging.example.com.
Type: NS
TTL: '900'
ResourceRecords: !GetAtt stagingHostedZone.NameServers
DependsOn:
stagingHostedZone
答案 1 :(得分:2)
我向AWS员工证实,2017年1月左右无法实现。
即使使用自定义lambda it was not possible until April,原因如下:
在AWS CloudFormation中,您无法创建NS或SOA类型的记录。
现在看起来像behavior is different:
具体而言,您无法为托管区域的根域创建或删除NS或SOA记录,但您可以为子域创建它们以进行委派。
从托管区域获取名称服务器[现在可以], 我已经测试了它。(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html#w2ab2c21c10d825c11)
我无法克服的唯一限制是跨帐户托管区域关系/修改,但它应该可以使用足够的CF / Lambda魔法。
答案 2 :(得分:0)
要为子域添加托管区域,您应该能够创建类似于所描述的现有托管区域,只需将Name
属性更改为子域。
但是,根据您的问题,听起来您实际上是在尝试为子域添加记录集(因此build.[DomainName]
会解析到您的群集),而不是单独的托管区域。
要为子域添加记录集,您需要将'build.[DomainName]'
指定为子域名RecordSet的名称,并使用A
record指定子域的目标IP地址(或指定'规范域名的CNAME
,而不是NS
record:
ParentHostedZoneClusterRecord:
Type: "AWS::Route53::RecordSet"
Properties:
Name:
Fn::Join: [".", ["build", !Ref DomainName]]
Comment: Managed by Cloud Formation
HostedZoneId: !Ref ParentHostedZoneID
TTL: 30
Type: A
ResourceRecords: [!Ref KubernetesClusterIp]