AWS cft" fn :: if"显示错误

时间:2017-11-08 10:14:29

标签: amazon-web-services amazon-cloudformation

我在模板中使用以下行

     "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文档没有帮助。我已经完美地指定了这些条件,所以不必为此烦恼了

2 个答案:

答案 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“}]}

在您的代码中,它只传递了两个元素。

正确检查AWS文档。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if

答案 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
                    ]}
                ]
            }
        }
    }