我正在使用此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。
我该怎么做?
答案 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。