Please note: currently only YAML is supported
CFC - CloudFormation Compiler - A simple tool that helps you "compile" static variables or snippets in your AWS CloudFormation template.
When you start working frequently with AWS CloudFormation you often come up against limits. One of these limits is the handling of reusable components. For example, if you want to define several EC2 instances with the same user data script, and if you want to maintain this script only on one place and not per EC2 instance. Or if you want to use static variables in a CloudFormation template at several places.
This project tries to offer a solution for exactly these problems.
$ npm install cfc -g
$ cfc --source source.yaml --config config.yaml --target build/target.yaml
- --source [PATH] path to source template
- --config [PATH] path to configuration file
- --target [PATH] path to the target file
You can find a detailed example in the samples folder of this repository.
The configuration is described in yaml. You can define a "Template" or a "Value".
- Template: path to a snippet
- Value: value to be inserted
For Templates: Please make sure that the file paths are accessible from the execution location.
SnippetA:
Template: snippet-a.yaml
ValueA:
Value: MyStaticValue
Reference defined "Values" or "Templates" using:
- !CFC [Name-Used-In-Configuration]
Furthermore you have the possibility to use functions inside your source template.
- !CFC uuidv4()
- uuidv4 (random) e.g.: 416ac246-e7ac-49ff-93b4-f7e94d997e6b
- !CFC randomString(length)
- generates a random alphanumeric string of a given length
- !CFC timestamp()
- current timestamp e.g.: 1530210906
AWSTemplateFormatVersion: 2010-09-09
Description: A sample template
Resources:
SampleEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-c481fad3
InstanceType: t2.nano
KeyName: !CFC ValueA
BlockDeviceMappings:
-
DeviceName: /dev/sdm
Ebs:
VolumeType: gp2
VolumeSize: 10
UserData:
!CFC SnippetA
Tags:
- Key: Name
Value: !CFC uuidv4()
- Key: Timestamp
Value: !CFC timestamp()
- Key: RandomString
Value: !CFC randomString(10)
Feel free to contribute ;)