我在模板中使用以下行
"ec2instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : {"Ref" : "Publicinstancetype"},
"ImageId" : "<myimageid>",
"SubnetId" : { "Fn::If" : ["createpublicsubnet",{"Ref":"publicsubnet"},
{"Fn::If" : ["createprivatesubnet",{"Ref":"privatesubnet"}]}
]}
}
} 它显示为&#34;模板错误:Fn :: If需要带有三个元素的列表参数&#34;我到底哪里错了? AWS文档没有帮助。我已经完美地指定了这些条件,所以不必为此烦恼了
答案 0 :(得分:1)
List<String> names = new ArrayList<String>(something.getList());
需要3个元素,而您只提供2个参数。
请参阅AWS文档示例。
Fn:In
“SubnetId”:{“Fn :: If”:[“createpublicsubnet”,{“Ref”:“publicsubnet”},
应该是的 “SubnetId”:{“Fn :: If”:[“createpublicsubnet”,{“Ref”:“publicsubnet”},{“Ref:”privatesubnet“}]}
在您的代码中,它只传递了两个元素。
答案 1 :(得分:1)
由于Fn :: If函数需要3个参数,因此您需要使用伪参数:
"ec2instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : {"Ref" : "Publicinstancetype"},
"ImageId" : "<myimageid>",
"SubnetId" : {
"Fn::If" : [
"createpublicsubnet",
{"Ref" : "publicsubnet"},
{"Fn::If" : [
"createprivatesubnet",
{"Ref" : "privatesubnet"},
{"Ref" : "AWS::NoValue"} // Here
]}
]
}
}
}