JSON and YAML are used in AWS CloudFormation. Some people prefer YAML for its simplicity. It’s easy to read and code. However, YAML has its own little quirks. It relies heavily on indentation for its structure. If you don’t use the proper spaces, it will fail. I ran into an issue when I ran CloudFormation in AWS. The example below display the contents of my userdata.

This piece of code will NOT work in CloudFormation.

<pre lang="bash">
Fn::Base64: !Sub |
#!/bin/bash -xe
yum update -y
mkdir /data
cd /data
aws s3 cp s3://efs-s3-backup-engine .
sleep 30s
initiate.sh

This is valid. It’s all about indentation.

<pre lang="bash">
Fn::Base64: !Sub |
  #!/bin/bash -xe
  yum update -y
  mkdir /data
  cd /data
  aws s3 cp s3://efs-s3-backup-engine .
  sleep 30s
  initiate.sh

By the way, tabs are to be avoided like the plague.