When using awscli to create CloudFormation stacks, there’s a pre-create step of template validation that checks for template syntax issues:
aws cloudformation validate-template --template-body file:///path/to/template.json
The URI prefix file:// indicates that we are using local templates while templates at web-accessible locations like your S3 bucket are accessed using the –template-url option. For more information see the awscli docs or CLI help:
aws cloudformation validate-template help
For local templates, make sure you don’t forget the file:// URI and try to refer to the template via normal filesystem paths, otherwise you’ll get a confusing syntax error.
Without file:// URI:
aws cloudformation validate-template --template-body /Users/foo/git-repos/aws-mojo/cloudformation/aws-deploy-codecommit-repo.yml
An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: unsupported structure.
That’s a rather unhelpful error message that makes me think I’ve got some sort of template content error.
When we run the same command with file:// URI, we get the expected output:
aws cloudformation validate-template --template-body file:///Users/foo/git-repos/aws-mojo/cloudformation/aws-deploy-codecommit-repo.yml
{
"Description": "CloudFormation template for creating a CodeCommit repository along with a SNS topic for repo activity trigger notifications",
"Parameters": [
{
"NoEcho": false,
"Description": "Email address for SNS notifications on repo events",
"ParameterKey": "Email"
},
{
"NoEcho": false,
"Description": "A unique name for the CodeCommit repository",
"ParameterKey": "RepoName"
},
{
"DefaultValue": "Dev",
"NoEcho": false,
"Description": "Environment type (can be used for tagging)",
"ParameterKey": "Environment"
},
{
"NoEcho": false,
"Description": "A description of the CodeCommit repository",
"ParameterKey": "RepoDescription"
}
]
}