【问题标题】:Cloudformation: How do I setup multiple dns entries using AWS::Route53::RecordSetCloudformation:如何使用 AWS::Route53::RecordSet 设置多个 dns 条目
【发布时间】:2026-02-15 00:35:01
【问题描述】:

我正在使用这个 cloudformation 片段将我的 elb 映射到一个域名:

 "dnsRecord" : {
     "Type" : "AWS::Route53::RecordSet",
     "Properties" : {
         "HostedZoneName" : "apps.acme.com.",
         "Comment" : "DNS name for instance.",
         "Name" : {
             "Fn::Join" : [ "", [
                 {"Ref" : "Hostname"}, "."
             ]]
         },
         "Type" : "CNAME",
         "TTL" : "900",
         "ResourceRecords" : [
             { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ] }
         ]
     }
 }

我需要能够使用 cloudformation 使用参数为此 elb 设置许多名称或别名。我正在考虑将 CSV 字符串作为参数,但不清楚如何“迭代”该 CSV 字符串以根据需要多次重复此“dnsRecord”块。

例如,如果主机名是“fred.apps.acme.com,bertha.apps.acme.com”,这将为我设置 2 个 dns 条目到同一个 elb。

我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    对 CloudFormation 的迭代不会有太大帮助;实际上不可能。您可以编写 CFN 模板来完成所有必要的堆栈资源,并使用用户脚本或自定义启动脚本 [在 python 或 Shell 脚本中] 来迭代必要的 DNS 设置。

    您可以使用 Depends-On 和 Wait-Handle 来在 ELB 创建时在堆栈中引入时间延迟。

    【讨论】:

      【解决方案2】:

      没有迭代作为参数传入的 CSV 的概念。此外,迭代能力意味着在创建堆栈之前不会知道列表大小。 CloudFormation 要求显式定义每个资源。这意味着您不能传递可变大小的列表并为列表中的每个元素创建 AWS::Route53::RecordSet 资源。

      因为每个域名都需要自己的 AWS::Route53::RecordSet 资源,如果您需要添加或删除域,则需要编辑模板。

      在这种情况下,我建议为您要映射到 ELB 的每个域名创建一个新的 AWS::Route53::RecordSet。

      【讨论】: