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

时间:2015-01-27 11:07:24

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

我正在使用此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。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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