AWS CloudFormation中的条件属性

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

现在我已经有了一个模板参数PrivateIP并创build了一个Condition RequestedPrivateIP 。 到现在为止还挺好。 不过,我不知道如何将它合并到AWS::EC2::Instance资源规范。 我试过这个:

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

但是,当RequestedPrivateIP为false时失败

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

任何想法如何有select地分配一个静态的私人IP,如果没有指定离开它的AWS设置一个dynamic的?

我会改变结构:

 "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

由于它看起来像PrivateIpAddress属性不支持一个空string,因为它的价值,我会build议创build您的AWS::EC2::Instance两个单独的资源。 其中一个将有你的条件RequestedPrivateIP而另一个应该有相同的条件,但否定,例如DidNotRequestPrivateIP

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