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.

Read on


Share

           

RSS

  RSS

Newsletter


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. Hire me!

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


Published on