Conditional Property in AWS CloudFormation
We've got an AWS CloudFormation template for creating some EC2 instances. Some of those however require a specific PrivateIpAddress
and I'm struggling to figure out how to incorporate that to the template.
For now I've got a template parameter PrivateIP
and a creating a Condition RequestedPrivateIP
. So far so good. However I can't figure out how to incorporate it to the AWS::EC2::Instance
resource specification. I tried this:
"PrivateIpAddress": {
"Fn::If": [ "RequestedPrivateIP",
{ "Ref": "PrivateIP" },
"" <-- This doesn't work
]
},
But that fails when RequestedPrivateIP
is false with
CREATE_FAILED AWS::EC2::Instance NodeInstance Invalid addresses: []
Any idea how to optionally assign a static Private IP and if not specified leave it to AWS to set a dynamic one?
Solution 1:
i would change the structure to:
"PrivateIpAddress": {
"Fn::If": [ "RequestedPrivateIP",
{ "Ref": "PrivateIP" },
{"Ref" : "AWS::NoValue" }
]
}
the AWS::NoValue is there to give you the else option for your if statement. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html