AWS CloudFormation — Template Best Practices
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.