Amazon web services 映射的默认值
在映射上设置默认值的好策略是什么 即 我有一个名为Amazon web services 映射的默认值,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,在映射上设置默认值的好策略是什么 即 我有一个名为country 基于该国家/地区我使用映射引用DNS "Mappings" : { "DNS":{ "us" : {"dns" : "mypage.us.com", "ttl" : "600"}, "mx" : {"dns" : "mypage.default.com", "ttl" : "300"}, "ar" : {"dns" : "mypage.default.com", "ttl" : "300"},
country
基于该国家/地区
我使用映射引用DNS
"Mappings" : {
"DNS":{
"us" : {"dns" : "mypage.us.com", "ttl" : "600"},
"mx" : {"dns" : "mypage.default.com", "ttl" : "300"},
"ar" : {"dns" : "mypage.default.com", "ttl" : "300"},
"br" : {"dns" : "mypage.default.com", "ttl" : "300"}
}
}
如果us
已映射:
{ "Fn::FindInMap" : [ "DNS", { "Ref" : "country" }, "dns" ]}
我得到了
“mypage.us.com”
对于其他国家,我已经创建了一个具有默认值的庞大国家列表mypage.default.com
,在未来,这些值将发生变化,我们将添加更多的国家,有更好的方法吗?云的形成有助于在AWS资源的生命之初创建AWS资源。您也可以使用它进行更新,但我认为在您的情况下,将DNS配置逻辑构建到应用程序中似乎会更好。也许可以在DynamoDB中使用映射数据创建一个数据库表。您可以将Country值作为环境变量传递给服务器,并让它们在启动时根据环境变量查询DynamoDB表
或者,您可以让Cloud Formation在启动新堆栈时调用Lambda函数来查询DynamoDB,以获取基于国家/地区的DNS配置值,这样您就不必每次出现新条目时都不断修改堆栈JSON,也不必更改应用程序。我能够做到这一点的唯一方法是链接
Fn::If
语句而不是使用映射。我尝试使用Fn::If
和Fn::FindInMap
的组合,但是Fn::FindInMap
如果找不到映射,总是会引发错误
因此,对我来说,唯一的解决方案是使用以下方法(对我来说,是根据实例类型设置ecs内存):
在映射中,添加默认条目:
"Mappings" : {
"DNS":{
"us" : {"dns" : "mypage.us.com", "ttl" : "600"},
"mx" : {"dns" : "mypage.mx.com", "ttl" : "300"},
"default" : {"dns" : "mypage.default.com", "ttl" : "300"}
}
}
然后创建一个条件(YAML):
然后将FindInMap的第二个参数更改为:
{ "Fn::FindInMap" : [ "DNS", { "Fn::If": ["HasSpecialDNS", {"Ref" : "country"}, "default" ]}, "dns" ]}
或YAML:
Fn::FindInMap:
- DNS
- !If ["HasSpecialDNS", !Ref country, "default" ]
- "dns"
也许是Fn::If和Fn::FindInMap的组合?(也就是说,使用if条件,这样如果它在映射中找不到值——不确定结果是什么——那么您可以指定默认值…?)将数据(如DNS映射)编码到堆栈中(如OP请求的堆栈中)是完全合理的。使用AWS管道中的CI/CD,只需使用更新的映射推送新的提交。这个答案表明AWS Lambdas推出了新的堆栈,虽然技术上可行,但不建议这样做,也不知道OP在问什么。对不起,这个解决方案目前不起作用。FindInMap只能支持参数中的“Ref”和“FindInMap”功能。
{ "Fn::FindInMap" : [ "DNS", { "Fn::If": ["HasSpecialDNS", {"Ref" : "country"}, "default" ]}, "dns" ]}
Fn::FindInMap:
- DNS
- !If ["HasSpecialDNS", !Ref country, "default" ]
- "dns"