AWS Cloudformation从托管区域ID获取托管区域名称

时间:2019-07-29 15:35:59

标签: amazon-web-services amazon-cloudformation amazon-route53

采用类型AWS::Route53::HostedZone::Id的参数时,是否可以获取HostedZone名称?

托管区域已经存在,但不是使用Cloudformation创建的,因此我无法从另一个模板引用该名称。

使用类型AWS::Route53::HostedZone::Id允许用户从下拉菜单中进行选择,但选择的ID并非名称。

是否可以从ID中获取名称,以便创建记录集?

这是我正在使用的模板,请注意记录集条目的名称,在这里我们需要托管区域的名称来创建记录集。

AWSTemplateFormatVersion: '2010-09-09'
Description: Route53
Parameters:
  HostedZone:
    Type: AWS::Route53::HostedZone::Id
    Description: The Hosted Zone for the Record Set
  RecordSetName:
    Type: String
    Description: The name of the record set (all lowercase)

Resources:
  Route53:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId: !Ref HostedZone
      Comment: DNS name
      Name: !Sub ${RecordSetName}.??????
      Type: A
      TTL: '60'
      ResourceRecords:
        - 10.1.1.1

3 个答案:

答案 0 :(得分:1)

鉴于您似乎要解决的问题(为您的顶点域添加A记录)实际上并不需要类型为AWS::Route53::HostedZone::Id的下拉参数选择器。相反,您可以只使用String输入并使用HostedZoneName代替HostedZoneId中的AWS::Route53::RecordSet,如下所示:

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  DomainName:
    Type: String
    Description: apex domain name

Resources:
  Route53:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneName: !Sub '${DomainName}.'
      Comment: DNS name
      Name: !Ref DomainName
      Type: A
      TTL: '60'
      ResourceRecords:
        - 10.1.1.1

请注意,您需要在.的{​​{1}}末尾加上额外的句点DomainName)。

如果您想要一个子域,则可以执行以下操作:

HostedZoneName

参考AWSTemplateFormatVersion: '2010-09-09' Parameters: DomainName: Type: String Description: apex domain name DomainPrefix: Type: String Description: sub domain prefix Resources: Route53: Type: AWS::Route53::RecordSet Properties: HostedZoneName: !Sub '${DomainName}.' Comment: DNS name Name: !Sub '${DomainPrefix}.${DomainName}' Type: A TTL: '60' ResourceRecords: - 10.1.1.2 ,您将在为资源创建cloudformation导出时使用它们,而不是在此问题中使用资源时使用。

如果愿意,您可以创建包含顶点域名和托管区域ID的导出文件,这是我为保持整洁而希望执行的操作。但是,导出是特定于区域的,因此,如果您跨多个区域进行部署(如果您正在使用CloudFront并希望将API部署到us-east-1以外的地方,则可能会强加于您),那么您将需要在某些情况下伪造出口地区。

答案 1 :(得分:0)

Fn :: GetAtt Fn :: GetAtt内在函数返回此类型的指定属性的值。以下是可用的属性和示例返回值。

有关使用Fn :: GetAtt内在函数的更多信息,请参见Fn :: GetAtt。

名称服务器 返回特定托管区域的名称服务器集。例如:ns1.example.com。

私有托管区域不支持此属性。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html

答案 2 :(得分:0)

Hosted Zone ID显示在Route 53控制台UI中,看起来像Z1AVC899B05E2Y