我正在尝试将列表参数从主模板传递到子模板,但是我遇到了两个错误。这些是我在主模板上的当前参数。
"Parameters": {
"ELBSubnets": {
"Default": "subnet-5d8fea67,subnet-3e35cf15",
"Type": "CommaDelimitedList"
},
"LCKeyPair": {
"Default": "key-master",
"Type": "String"
},
"LCSecurityGroups": {
"Default": "sg-10a15c74,sg-880e5fec",
"Type": "CommaDelimitedList"
}
},
当传递给子模板时,它们在同一模板上的此方法中被引用。
"ChildTempate1": {
"Properties": {
"Parameters": {
"ELBSubnets": {
"Ref": "ELBSubnets"
},
"KeyPair": {
"Ref": "LCKeyPair"
},
"LCSecurityGroups": {
"Ref": "LCSecurityGroups"
}
},
在子模板上,它们的声明完全相同。
"Parameters": {
"ELBSubnets": {
"Type": "CommaDelimitedList"
},
"LCKeyPair": {
"Type": "String"
},
"LCSecurityGroups": {
"Type": "CommaDelimitedList"
}
},
并且它们在子模板中的此方法中被引用。
"KeyName": {
"Ref": "LCKeyPair"
},
"SecurityGroups": {
"Fn::Join": [
",",
[
{
"Ref": "LCSecurityGroups"
}
]
]
}
},
这是模板的另一部分。
"Subnets": {
"Fn::Join": [
",",
[
{
"Ref": "ELBSubnets"
}
]
]
}
},
当我尝试在主模板上使用 fn::join 时,它说
“模板验证错误:模板错误:每个 Fn::Join 对象都需要两个参数,(1) 字符串分隔符和 (2) 要连接的字符串列表或返回字符串列表的函数(例如 Fn:: GetAZs) 加入。”
当我不在主模板上使用 fn::join 时,错误是
属性参数的值必须是具有字符串(或简单类型)属性的对象
无论我是否在子模板中的相同参数上有 fn::join。
两个模板都可以在这里找到: https ://github.com/slimg00dy/Troposphere-CloudformationTests