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



我正在使用这个云形成片段将我的 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" ] }
         ]
     }
 }

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

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

我该怎么做?

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

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

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

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

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

最新更新