AWS CloudFormation 中的条件属性

AWS CloudFormation 中的条件属性

我们有一个用于创建一些 EC2 实例的 AWS CloudFormation 模板。但其中一些需要特定的PrivateIpAddress,而我正在努力弄清楚如何将其合并到模板中。

现在我有一个模板参数PrivateIP和一个创建的条件RequestedPrivateIP。到目前为止一切顺利。但是我不知道如何将其合并到AWS::EC2::Instance资源规范中。我试过这个:

    "PrivateIpAddress": {
        "Fn::If": [ "RequestedPrivateIP",
            { "Ref": "PrivateIP" },
            ""                            <-- This doesn't work
        ]
    },

但当RequestedPrivateIP

CREATE_FAILED    AWS::EC2::Instance    NodeInstance    Invalid addresses: []

知道如何选择性地分配静态私有 IP 吗?如果未指定,则让 AWS 设置动态 IP?

答案1

我将把结构改为:

"PrivateIpAddress": {
    "Fn::If": [ "RequestedPrivateIP",
        { "Ref": "PrivateIP" },
        {"Ref" : "AWS::NoValue" }
    ]
}

AWS::NoValue 为您的 if 语句提供了 else 选项。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html

答案2

由于该属性似乎PrivateIpAddress不支持将空字符串作为其值,因此我建议创建两个单独的资源AWS::EC2::Instance。其中一个将满足您的条件RequestedPrivateIP,而另一个应具有相同的条件但被否定,例如DidNotRequestPrivateIP

"InstanceWithPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "RequestedPrivateIP",
    "Properties": {
        [...]
    }
},

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}

相关内容