simplecf

Templating system for AWS Cloudformation


Keywords
AWS, Cloudformation, simplecf
License
GPL-3.0
Install
pip install simplecf==1.1.0

Documentation

IMPORTANT

simplecf uses Boto3 from 1.1.0 forward, if you need Boto (aka Boto2) support, please install version 1.0.2 using this command:

pip install simplecf==1.0.2

What is simplecf?

simplecf is a templating system for AWS Cloudformation that allows you to make many variations of a single template for maximum code re-use. See a simple example HERE

The standard use-case is that you have 4 environments {dev,qa,stage,prod} based on one Cloudformation template. Rather than maintaining 4 templates that are mostly identical, you can add Mustache {{ tags }} to your templates and create simple JSON data files that specify the values. This has the added benefit of eliminating the need for a lot of boilerplate mapping code in the "Parameters" section of your templates.

simplecf also supports data file fragments; You can create a single data file for each AWS region that contain region-specific data like ami-id, etc... and import that data file fragment into your other templates.

How to use

You can install using pip:

#As root, or alternately use --user
pip install simplecf

Create a standard AWS Cloudformation template, adding Mustache {{ tags }} for the parts you wish to be dynamically substituted

my-cf-template.json:

...
"Tags":[
  {"Key": "Phase", "Value": "{{ phase }}"}
]
...

Next, create a JSON file to define the stack and fill in the tags. You can generate an empty data file with simplecf.py -d prod.json -c my-cf-template.json

prod.json:

{
  "CF_TEMPLATE": "my-cf-template.json",
  "STACK_NAME": "MyStackProd",
  "STACK_REGION": "us-east-1",
  "phase": "Prod"
}

Then run simplecf to generate the template

simplecf.py -d prod.json

Which outputs:

MyStackProd.json:

...
"Tags":[
  {"Key": "Phase", "Value": "Prod"}
]
...

Run simplecf.py with --help to see various other tools and options.