jcg*_*ley 5 amazon-web-services aws-cloudformation
是否可以在CloudFormation中使用嵌套映射,如下例所示?
"Mappings" :
{
"Regions" :
{
"us-east-1" :
{
"Environments" :
{
"dev" :
{
"ImageId" : "something",
"Subnet" : "something"
},
"qa" :
{
"ImageId" : "something",
"Subnet" : "something"
}
}
},
"us-west-2" :
{
"Environments" :
{
"dev" :
{
"ImageId" : "something",
"Subnet" : "something"
},
"qa" :
{
"ImageId" : "something",
"Subnet" : "something"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试做这样的事情时,我收到以下错误:
模板格式错误:每个Mappings属性必须是String或List.
如果无法嵌套映射,那么在CFT中存储需要两个参数选择的值的最佳方法是什么(例如依赖于BOTH Region和environment的值)?
我最终这样做:
"Mappings" :
{
"dev" :
{
"us-east-1" :
{
"ImageId" : "something",
"Subnet" : "something"
},
"us-west-2" :
{
"ImageId" : "something",
"Subnet" : "something"
}
},
"qa" :
{
"us-east-1" :
{
"ImageId" : "something",
"Subnet" : "something"
},
"us-west-2" :
{
"ImageId" : "something",
"Subnet" : "something"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里重要的一点是对象在"映射"和键之间交替".所以在这种情况下,"dev"是一个映射,"us-east-1"是一个键,"ImageId"是一个映射,和"某事"是一个关键.映射名称不能包含非字母数字字符,因此区域名称不能是映射.因此,使用环境作为第一个参数并使用区域名称作为第二个参数是必需的.
在我看来,像CloudFormation的Mappings部分有很多非常奇怪的任意规则,令我惊讶的是它不是更灵活,但你有它.
像这样的东西:
"ImageMap" : {
"us-east-1" : { "dev" : "ami-11111111", "qa" : "ami-22222222" },
"us-west-1" : { "dev" : "ami-33333333", "qa" : "ami-44444444" }
}
Run Code Online (Sandbox Code Playgroud)
然后访问这些值:
"Value" : {
"Fn::FindInMap" : [
"ImageMap", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" }
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5883 次 |
| 最近记录: |