AWS CloudFormation — Template Best Practices

less than 1 minute read

Guidelines for writing maintainable CloudFormation templates.


Use Parameters for Environment Differences

Parameters:
  Env:
    Type: String
    AllowedValues: [dev, staging, prod]

One template, multiple environments.


Use Mappings for Region-Specific Values

Mappings:
  RegionAMI:
    us-east-1:
      HVM: ami-0c55b159
    eu-west-1:
      HVM: ami-0a588942

Use Conditions to Toggle Resources

Conditions:
  IsProd: !Equals [ !Ref Env, "prod" ]

Resources:
  ProdAlarm:
    Type: AWS::CloudWatch::Alarm
    Condition: IsProd

Don’t Hardcode

Hardcode Better
ami-0c55b159 !FindInMap or SSM Parameter
us-east-1 !Ref "AWS::Region"
123456789012 !Ref "AWS::AccountId"
my-bucket !Sub "${AWS::StackName}-bucket"

Use DeletionPolicy on Stateful Resources

Resources:
  ProdDB:
    Type: AWS::RDS::DBInstance
    DeletionPolicy: Snapshot

Enable Termination Protection for Production

$ aws cloudformation update-termination-protection \
    --enable-termination-protection \
    --stack-name prod-app

What’s Next?

Understanding why stacks roll back.

← Best Practices Troubleshooting Rollback →

Updated: