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

AWS cft "fn::if" shows error

我在我的模板中使用以下行

     "ec2instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
        "InstanceType" : {"Ref" : "Publicinstancetype"},
        "ImageId" : "<myimageid>",
        "SubnetId" : { "Fn::If" : ["createpublicsubnet",{"Ref":"publicsubnet"},
        {"Fn::If" : ["createprivatesubnet",{"Ref":"privatesubnet"}]}
        ]}
}   

} 它显示为 "Template error: Fn::If requires a list argument with three elements" 我究竟哪里出错了? AWS 文档没有帮助。我已经完美地指定了条件,所以不用再费心了

Fn:In 需要 3 个元素,而您只提供了 2 个参数。

请参阅 AWS 文档示例。 "SecurityGroups" : [{ "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] }]

"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

由于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
                    ]}
                ]
            }
        }
    }