Cloudformation
Basic structure of Json and Yaml templates
YAML | JSON |
---|---|
AWSTemplateFormatVersion: 2010-09-09 Description: Yaml string, version 1.0 Metadata: {} Parameters: {} Mappings: {} Conditions: {} Transform: {} Resources: {} Outputs: {} |
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "JSON string, version 1.0", "Metadata": {}, "Parameters": {}, "Mappings": {}, "Conditions": {}, "Transform": {}, "Resources": {}, "Outputs": {} } |
Structured template
YAML | JSON |
---|---|
AWSTemplateFormatVersion: 2010-09-09 Description: JSON string Metadata: {} Parameters: InstanceTypeParameter: Type: String Default: t2.micro AllowedValues: - t2.micro - m1.smal Description: 'Enter t2.micro, m1.large' Mappings: {} # Mapping01: # Key01: # Name: Value01 # Key02: # Name: Value02 Conditions: {} Transform: {} # AWS::serverless # AWS::Include (reusing template snippets) Resources: MyBucket: #logicalID must be unique, can be reused within the template Type: 'AWS:S3::Bucket' #type of resource to create Properties: #additional options for a resource 'Fn::Transform;: - Name: 'AWS::Include' Parameters: Location: s3://bucket/MyBucketName.yaml Outputs: {} # logicalID: # Descryption: # Value: # Export: # Name: Value to export |
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "JSON string", "Metadata": {}, "Parameters": { "InstanceTypeParameter": { "Type": "String", "Default": "t2.micro", "AllowedValues": [ "t2.micro", "m1.small" ], "Description": "Enter t2.micro, m1.small" } }, "Mappings": {}, "Conditions": {}, "Transform": {}, "Resources": {}, "Outputs": {} } |
Intrinsic Functions (buildin)
Use intrinsic functions in your templates to assign values to properties that are not available until runtime.
Fn::Base64 Fn::Cidr Condition Functions Fn::FindInMap Fn::GetAtt Fn::GetAZs Fn::ImportValue Fn::Join Fn::Select Fn::Split Fn::Sub Ref
Syntax
Within AWS designer following are available:
ctrl
+space
- opens auto-completion and help context in a resource properties- pink dot - indicates a resource depends on other resource
Function short form
The exclamation point indicates the YAML short form of a command. It does not indicate a Boolean not.
"Fn::And": [{condition}, {...}] #Json Fn::And: [Condition] #yaml full syntax !And [condition] #short form
Cloudformation Vim lint
Validate CloudFormation yaml/json templates against the CloudFormation spec and additional checks. Includes checking valid values for resource properties and best practices. The Serverless Application Model (SAM) is supported by the linter. The template is transformed using AWS SAM (https://github.com/awslabs/serverless-application-model) before the linter processes the template.
Prereq for VIM, install cfn-lint command line tool
pip install cfn-lint cfn-lint <path to yaml template>
Install Vim 8.0+ Vundle plugin
#add plugin to plugin list $ vim ~/.vimrc Plugin 'speshak/vim-cfn' #install plugin from a terminal $ vim +PluginInstall +qall #configure $ vim ~/.vimrc " Docs say to add to ~/.vim/after/plugin/syntastic.vim for vundle but I did add to ~/.vimrc let g:syntastic_cloudformation_checkers = ['cfn_lint']
Vim cnf-lint real example
Set Clouformation syntax in case was not autodetected
:set syntax=yaml.cloudformation
References
- cfn-python-lint.git Github
References
- aws-cloudformation-templates Aws Official, go to Sample Templates