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"