Terraform vs CloudFormation
IaC.
Terraform strengths
Multi-cloud. Same tool, same syntax across AWS, GCP, Azure, Cloudflare. Vendor-neutral.
Mature module ecosystem. Public registry; thousands of community modules.
Strong third-party tooling: terragrunt, atlantis, terratest, Terraform Cloud.
CloudFormation strengths
Native AWS. First to support new AWS services and features. Tightly integrated with AWS Console and IAM.
Drift detection built-in. CFN tracks resource state; surfaces external modifications.
Stack management primitives: stack sets, nested stacks, change sets. Native concepts.
Trade-offs
CloudFormation YAML/JSON is verbose. HCL is more compact.
Terraform state management requires care. CloudFormation manages state in the service; less to break.
CloudFormation locked to AWS. Multi-cloud orgs end up with separate tools per cloud.
Decision criteria
AWS-only stack: either works. CloudFormation slightly faster to support new services; Terraform has better tooling.
Multi-cloud or future-multi-cloud: Terraform or Pulumi. Avoid AWS-locked IaC.
Existing infrastructure: stay with what you have. Migration cost rarely pays.