CloudFormation vs Terraform
AWS 锁定 vs 多云;本站推荐 Terraform 路径。
30 分钟
CloudFormation vs Terraform
二者都是 声明式 IaC,但 生态边界不同:CFN 仅 AWS、与控制台/Stack 深度集成;Terraform 多云 + K8s Provider、社区 Module 丰富。CodeRoadMap 推荐 Terraform + GitOps 为部署主路径,CFN 用于 AWS 原生理解与读 CDK/SAM 产物。
学习目标
- 一张表说清 CFN 与 TF 的取舍
- 明确 CodeRoadMap 为何不默认 CFN 管生产
- 串联 terraform-essentials 与 aws-essentials
对比
| 维度 | CloudFormation | Terraform |
|---|---|---|
| 厂商 | AWS 官方 | HashiCorp / OpenTofu 生态 |
| 语言 | JSON/YAML + 内置函数 | HCL |
| 状态 | Stack 内资源映射 | tfstate(可 S3 远程) |
| 多云 | 否 | AWS/Azure/GCP/K8s |
| 预览 | ChangeSet | terraform plan |
| 模块 | Nested Stack / Registry | Module Registry |
同一 VPC 的两份声明
CloudFormation:
Resources:
MainVpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: coderoadmap-lab
Terraform(tf-aws):
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = { Name = "coderoadmap-lab" }
}
语义相同;CodeRoadMap 仓库与 CI 以 .tf 为准,避免双轨维护。
CodeRoadMap 部署路径
推荐:terraform apply → RDS/VPC/EKS → helm-gitops → github-actions 镜像
补课:cloudformation-essentials → 读懂 AWS 文档、SAM/CDK 合成模板
认知:aws-essentials → Console 理解服务再 IaC 固化
| 选 CFN | 选 TF |
|---|---|
| 纯 AWS、StackSet 企业基线 | 多云或 TF 已落地 |
| 学 SAM/CDK 底层 | CodeRoadMap 标准 infra 目录 |
| 控制台一键实验 Stack | PR 上 plan + OIDC apply |