CloudFormation Parameters: Turbo Charge your resource deployment

AWS CloudFormation in a Nutshell

Before we dive into the details of CloudFormation Parameters, lets build some context around what CloudFormation is. It is a service by Amazon, used to  model, provision and configure AWS  resources in the Cloud. You do this by creating a template, which is a a simple text file in JSON or YAML format. 

In case you are not familiar with JSON and YAML, JSON stands for JavaScript Object Notation and is lightweight data-interchange format easy for humans and machines to comprehend. Similarly, YAML ( “YAML Aint Markup Language“) is a data-serialization language  and uses indentation for formatting. This minimal syntax makes it easy to understand and write.

Lets walk thru an example to make better sense. Assume you want to create a DynamoDB table with indexes. You would have to manually provision and configure the table name,  keys, capacity units, field attributes, primary and secondary indexes and more. With CloudFormation, you specify your required AWS resources and its properties in your template and create a stack from either the CLI, API or Console.

cloudformation template image

CloudFormation Parameters - the basics

A CloudFormation template is composed of multiple sections – Format Version, Description, Metadata, Parameters, Mappings, Conditions, Transform, Resources and Output. Parameters, though an optional section in the template can be used to turbo charge your resource deployment game.

CloudFormation Parameters are used to pass values to the template during run-time when creating or updating a stack. These parameters are then referenced from the Resources or Output sections in the template. Listed below is the generic format for a CloudFormation Parameter in JSON and YAML format.

Parameter Format for JSON

“Parameters” : {
          “ParameterLogicalID” : {
                  “Type” : “DataType”,
                  “ParameterProperty” : “value”

Parameter Format for YAML

Parameters :
                  Type : DataType
                  ParameterProperty : value

CloudFormation Parameters and their Properties

When using CloudFormation Parameters, there are 11 properties you can specify for control and structure. Almost all of them are optional, except for the Type parameter. The table below lists the parameter properties and description.

Parameter Property
Regular expression denoting the permitted String type patterns
List of Values in Array format
Text to be displayed when a constraint is violated
Value to use if no input is provided
Textual description of the parameter not exceeding 4000 characters
Smallest number of characters allowed for String types in integer format
Largest number of characters allowed for String types in integer format
Smallest numeric value allowed for Number types
Largest numeric value allowed for Number types
Used to display or mask the parameter value for display
Used to specify the data type for the parameter

TYPE Property - Why its important

The type property specifies the data type for the named parameter. It’s the only  required property when defining CloudFormation parameters.  

Data Type
AWS-Specific Parameter Types
Defined as an AWS value and VPC ID key pair
[“apple”, “mango”, “orange”]
Defined as an Array of strings separated by commas
[“20”, “40”, “60”]
Defined as an Array of integers/floats separated by commas
Defined as a Number type (integer/float)
SSM Parameter Types
Defines a type similar to a System Manager Parameter
Defines the parameter as a literal string

Top 5 CloudFormation Parameters Usage examples

If all this technical jargon is making your head spin, don’t fret! We will walk through the top 5 frequently used CloudFormation Parameter patterns. Once you get familiar with them, try tweaking them for your specific use cases.

Example 1: Create an AWS-Specific parameter for a EC2 Key Pair


“Parameters” : {
          “KeyName”: {
                    “Description” : “EC2 Key Pair Name”,
                    “Type”: “AWS::EC2::KeyPair::KeyName”,
                    “ConstraintDescription” : “EC2 Key Pair must exist”


Parameters :
                    Description : EC2 Key Pair Name
                    Type: AWS::EC2::KeyPair::KeyName
                    ConstraintDescription : EC2 Key Pair must exist

Example 2: Create a Parameter for SSH access to an EC2 Instance


“Parameters” : {
          “SSHLocation” : {
                  “Description” : ” IP address for SSH to
                                                 the EC2 instance”,
                  “Type”: “String”,
                  “MinLength”: “9”,
                  “MaxLength”: “18”,
                  “Default”: “”,
                  “AllowedPattern”: “(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})
                  “ConstraintDescription”: “IP in x.x.x.x/x format.”


Parameters :
          SSHLocation :
                  Description : IP address for SSH to
                                          the EC2 instance
                  Type: String
                  MinLength: 9
                  MaxLength: 18
                  Default: 0000/0
                  AllowedPattern: (\\d13)\\(\\d13)\\(\\d13)
                  ConstraintDescription: IP CIDR range in xxxx/x format

Example 3: Create Parameters for a Database

In this example, we will create 3 parameters for a DynamoDB database. One for the Database Name (DBName),One for the Database User (DBUser) and one for the Database Password (DB Password). 

This example can be used for other databases and any scenario requiring Username and Password parameters.


“Parameters” : {

“DBName”: {

“Default”: “testDynamoDB”,
“Description” : “DynamoDB database name”,
“Type”: “String”,
“MinLength”: “1”,
“MaxLength”: “64”,
“AllowedPattern” : “[a-zA-Z][a-zA-Z0-9]*”,
“ConstraintDescription” : “Must start with a letter and contain only alphanumeric characters”

“DBUser”: {

“NoEcho”: “true”,
“Description” : “Username for DynamoDB database”,
“Type”: “String”,
“MinLength”: “1”,
“MaxLength”: “16”,
“AllowedPattern” : “[a-zA-Z][a-zA-Z0-9]*”,
“ConstraintDescription” : “Must start with a letter and contain only alphanumeric characters”

“DBPassword”: {

“NoEcho”: “true”,
“Description” : “Password for DynamoDB database”,
“Type”: “String”,
“MinLength”: “8”,
“MaxLength”: “41”,
“AllowedPattern” : “[a-zA-Z0-9]*”,
“ConstraintDescription” : “Alphanumeric characters only”




Parameters :


Default: testDynamoDB
Description : DynamoDB database name
Type: String
MinLength: 1
MaxLength: 64
AllowedPattern : [a-zA-Z][a-zA-Z0-9]*
ConstraintDescription : Must start with a letter and contain only alphanumeric characters


NoEcho: true
Description : Username for DynamoDB database
Type: String
MinLength: 1
MaxLength: 16
AllowedPattern : [a-zA-Z][a-zA-Z0-9]*
ConstraintDescription : Must start with a letter and contain only alphanumeric characters


NoEcho: true
Description : Password for DynamoDB database
Type: String
MinLength: 8
MaxLength: 41
AllowedPattern : [a-zA-Z0-9]*
ConstraintDescription : Alphanumeric characters only

Example 4: Create a CloudFormation Parameter for an Email Address


“Parameters”: {
     “EMailAddress”: {
         “Description”: “Email address for issue notification”,
         “Type”: “String”,
         “AllowedPattern”: “([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}
         “ConstraintDescription”: “Enter a valid email address.”


         Description: Email address for issue notification
         Type: String
         AllowedPattern: [a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}
         ConstraintDescription: Enter a valid email address


Example 5: Create a CloudFormation Parameter for a SageMaker EC2 Instance Type


“Parameters” : {
     “InstanceType” : {
         “Description” : “SageMaker EC2 instance type”,
         “Type” : “String”,
         “Default” : “ml.m4.xlarge“,

         “AllowedValues” : [ “ml.m4.xlarge”, “ml.m4.4xlarge”,
                                             “ml.c4.2xlarge”, “ml.c4.8xlarge”,
                                             “ml.p2.xlarge”, “ml.p2.8xlarge”,
         “ConstraintDescription” : “Must be a valid EC2 instance


Parameters :
     InstanceType :
         Description : SageMaker EC2 instance type
         Type : String
         Default : ml.m4.xlarge
         AllowedValues :
                 – ml.m4.xlarge
                 – ml.m4.4xlarge
                 – ml.m4.10xlarge
                 – ml.c4.xlarge
                 – ml.c4.2xlarge
                 – ml.c4.8xlarge
                 – ml.p2.xlarge
                 – ml.p2.8xlarge
                 – ml.p2.16xlarge
         ConstraintDescription : Must be a valid EC2 instance

In Conclusion

Keep the following key points in mind: 

  • CloudFormation Parameters are an optional section in the template. However, using them will make your template flexible and dynamic.
  • At a minimum, you need to specify a logical id (name) and type for your parameter.
  • For AWS specific values, always use the AWS-Specific Parameter Types.
  • Though not required, using Parameter Constraints and Defaults is considered best practice.


Now that we covered some of the basics. See if you can provision an Amazon Redshift Cluster using AWS CloudFormation. Here are a few articles to get you started


Spark SQL Related Resources

AWS CloudFormation User Guide

AWS Official User guide on CloudFormation

Service Offerings by Obstkel

Get to know the AWS Cloud Services offered by Obstkel

Email us at :

Copyright 2020 © OBSTKEL LLC. All rights Reserved.
Scroll to Top