Optional Parameter in CloudFormation

Sometimes you want a CloudFormation Parameter to be optional. Unfortunately a blank Parameter contains an empty string. If you pass this empty string to e.g. the KeyName Property of an EC2 Instance or Launch Configuration you end up with a validation error.

Imagine the following CloudFormation template:

{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Optional Parameters in CloudFormation: Problem",
"Parameters": {
"KeyName": {
"Description": "Provides the name of the EC2 key pair",
"Type": "String"
}
},
"Resources": {
"LaunchConfiguration": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"KeyName": {"Ref": "KeyName"}
[...]
}
}
}
}

If you leave the KeyName blank you will get the following error:

==Parameter validation failed: parameter value for parameter name KeyName does not exist. Rollback requested by user.==

The solution is the make use of CloudFormation Conditions, the Condition Function Fn::If and the Pseudo Parameter AWS::NoValue.

{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Optional Parameters in CloudFormation: Solution",
"Parameters": {
"KeyName": {
"Description": "Provides the name of the EC2 key pair",
"Type": "String"
}
},
"Conditions": {
"HasKeyName": {"Fn::Not": [{"Fn::Equals": ["", {"Ref": "KeyName"}]}]}
},
"Resources": {
"LaunchConfiguration": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"KeyName": {"Fn::If": ["HasKeyName", {"Ref": "KeyName"}, {"Ref": "AWS::NoValue"}]}
[...]
}
}
}
}

Now you can leave the KeyName parameter blank to not add a EC2 KeyPair to the LaunchConfiguration.

Published on


Subscribe to free monthly updates.

One subscriber wins our book AWS in Action every month.

Michael Wittig

Michael Wittig

I’m the author of Amazon Web Services in Action. I work as a software engineer, and independent consultant focused on AWS and DevOps.

Is anything missing in my article? I'm looking forward to your feedback! @hellomichibye or michael@widdix.de.

marbot

Are you part of a highly motivated DevOps team? Use marbot, a friendly chatbot, to forward all kind of alerts from your AWS infrastructure to Slack. Alerts are escalated across your team automatically allowing you to focus on your daily work.

Amazon Web Services in Action

Amazon Web Services in Action introduces you to computing, storing, and networking in the AWS cloud.

Customer Reviews:

Subscribe to free monthly updates.

One subscriber wins our book AWS in Action every month.


Subscribe for free