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" } ] }