Cloudformation:如何使用 AWS::Route53::RecordSet 设置多个 DNS 条目

Cloudformation: How do I setup multiple dns entries using AWS::Route53::RecordSet

我正在使用这个 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 字符串作为参数,但不清楚如何 "iterate" 在该 CSV 字符串上根据需要多次重复此 "dnsRecord" 块。

例如,如果主机名是 "fred.apps.acme.com,bertha.apps.acme.com",那将为我设置 2 个指向同一个 elb 的 dns 条目。

我该怎么做?

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

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

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

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

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