AWS: How to specify a boolean parameter in a CloudFormation template

Willem van Ketwich picture Willem van Ketwich · Jan 11, 2017 · Viewed 38.6k times · Source

I'm trying to specify a boolean parameter in a CloudFormation template so I can conditionally create resources based on a parameter passed in.

Looking at the documentation here and here it would appear there is a discernible lack of a boolean data type.

What is best practice for specifying a boolean? possibly Number with 0 or 1 or String with AllowedValues 'true' and 'false'?

Answer

wjordan picture wjordan · Jan 11, 2017

The Quick Start templates are a good, semi-official reference point of how complex templates can/should be created, and they implement Boolean values for Conditional resources exactly as you described, using a String with AllowedValues true and false. Here's a specific example:

"EnableBanner": {
    "AllowedValues": [
        "true",
        "false"
    ],
    "Default": "false",
    "Description": "To include a banner to be displayed when connecting via SSH to the bastion, set this parameter to true",
    "Type": "String"
}

A similar example can be found in the Conditionally use an existing resource example from the CloudFormation documentation, where the AllowedValues are default or NONE (the default).

To conditionally create a resource based on such a boolean parameter, you add a Condition statement containing a Fn::Equals intrinsic function matching true, then add a Condition key to the resource.

Here's a complete, minimal example template:

Launch Stack

Parameters:
  CreateResource:
    Description: Whether I should create a resource.
    Default: false
    Type: String
    AllowedValues: [true, false]
Conditions:
  ShouldCreateResource:
    !Equals [true, !Ref CreateResource]
Resources:
  Resource:
    Type: AWS::CloudFormation::WaitConditionHandle
    Condition: ShouldCreateResource