CloudFormation (IaC)
CloudFormation lets you define your entire AWS infrastructure as a template, so it can be created and destroyed reliably.
AWS CloudFormation is AWS's infrastructure as code service. You describe the resources you want in a template (YAML or JSON), and CloudFormation creates, updates and deletes them as a single unit called a stack.
Why infrastructure as code?
- Repeatable — spin up identical dev, test and prod environments.
- Version-controlled — your infrastructure lives in Git alongside your app.
- Safe — CloudFormation rolls back automatically if a deployment fails.
Template anatomy
- Parameters — inputs you pass in at deploy time.
- Resources — the AWS objects to create (the only required section).
- Outputs — values to export, like a bucket name or URL.
Example
AWSTemplateFormatVersion'2010-09-09'
DescriptionA single S3 bucket managed as code
Parameters
BucketName
TypeString
DescriptionGlobally unique bucket name
Resources
AssetsBucket
TypeAWSS3Bucket
Properties
BucketName!Ref BucketName
VersioningConfiguration
StatusEnabled
Outputs
BucketArn
DescriptionARN of the created bucket
Value!GetAtt AssetsBucket.ArnWhen to use it
- A DevOps team defines an entire three-tier web application stack in a CloudFormation template so any developer can recreate the exact environment in minutes.
- A company uses CloudFormation StackSets to deploy identical security guardrails (CloudTrail, Config, GuardDuty) across all 20 AWS accounts in their organization simultaneously.
- After a disaster recovery event, an operations team runs a CloudFormation template to rebuild the entire VPC, subnets, and application infrastructure from scratch.
More examples
Minimal CloudFormation Template
A minimal CloudFormation template that accepts a bucket name parameter and creates a versioned S3 bucket with an output ARN.
AWSTemplateFormatVersion: '2010-09-09'
Description: Simple S3 bucket
Parameters:
BucketName:
Type: String
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref BucketName
VersioningConfiguration:
Status: Enabled
Outputs:
BucketArn:
Value: !GetAtt MyBucket.ArnDeploy a Stack from CLI
Deploys or updates a CloudFormation stack from a local template file, passing parameter values on the command line.
aws cloudformation deploy \
--template-file stack.yaml \
--stack-name my-s3-stack \
--parameter-overrides BucketName=my-unique-bucket-2024 \
--capabilities CAPABILITY_IAMCheck Stack Events on Failure
Filters stack events to show only failed resources and their reasons, the fastest way to diagnose a deployment failure.
aws cloudformation describe-stack-events \
--stack-name my-s3-stack \
--query 'StackEvents[?ResourceStatus==`CREATE_FAILED`].{Resource:LogicalResourceId,Reason:ResourceStatusReason}' \
--output table
Discussion