Optional Parameter in CloudFormation

Michael Wittig – 23 Mar 2016

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:

Cover of Amazon Web Services in Action

Download Free Chapter

Our book Amazon Web Services in Action is a comprehensive introduction to computing, storing, and networking in the AWS cloud. You'll find clear, relevant coverage of all the essential AWS services you to know, emphasizing best practices for security, high availability and scalability.

==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.

Michael Wittig

Michael Wittig

Consultant. Entrepreneur. Author. Focusing on Amazon Web Services (AWS) since 2013.

You can contact me via Email, Twitter, and LinkedIn.

Briefcase icon
Hire me