The Infrastructure as Code Question
If you're managing AWS infrastructure manually through the console, you're creating a single point of failure — the person who remembers how things are configured. Infrastructure as Code (IaC) solves this by making your infrastructure version-controlled, repeatable, and documented.
The two main options for AWS are Terraform (by HashiCorp) and CloudFormation (by AWS). Both work. The right choice depends on your situation.
CloudFormation
CloudFormation is AWS-native. It's built into the platform, uses JSON or YAML templates, and integrates tightly with every AWS service.
Advantages:
- Zero additional tooling — it's already in your AWS account
- Supports every AWS service on day one (often before Terraform does)
- Drift detection built in
- Integrates with AWS Organizations and Service Catalog
Disadvantages:
- Verbose template syntax
- AWS-only — if you ever use GCP or Azure, you'll need another tool
- Error messages can be cryptic
- Rollback behavior can be frustrating
Terraform
Terraform is provider-agnostic. It uses HCL (HashiCorp Configuration Language) and supports AWS, Azure, GCP, and hundreds of other providers.
Advantages:
- Cleaner, more readable syntax
- Multi-cloud support
- Large community and module ecosystem
- State management gives clear picture of what exists
- Plan output shows exactly what will change
Disadvantages:
- Requires managing state files (S3 + DynamoDB backend for AWS)
- New AWS features may take weeks or months to appear
- State drift can cause issues if resources are modified outside Terraform
- License changes have introduced uncertainty
Our Recommendation
For AWS-only shops with no plans to go multi-cloud: either works, but CloudFormation has lower operational overhead since there's no state to manage.
For organizations using or planning to use multiple cloud providers: Terraform is the clear choice.
For teams already using one or the other: switching has real costs. The grass isn't always greener. Invest in learning your current tool deeply before considering a migration.
The most important thing is to use something. Manual infrastructure management doesn't scale and creates unacceptable risk.