用途
本技能提供使用 Terraform 管理 AWS 基础设施即代码(IaC)的完整指南,面向生产环境,覆盖 VPC 网络、IAM 安全、状态管理以及常见 AWS 资源,基于 Terraform 1.11+ 特性与 AWS Provider 6.x。
适用场景包括:使用 Terraform 预置 AWS 基础设施;搭建含公有/私有子网的 VPC 网络;配置 IAM 角色、策略与权限;用 S3 后端管理 Terraform 状态;部署数据库(RDS、Aurora);创建适配 EKS 的 VPC 配置;排查 terraform plan/apply 失败;从 DynamoDB 迁移到 S3 原生锁;将已有 AWS 资源导入 Terraform。
主要能力
Provider 与变量配置
支持声明 Terraform 与 AWS Provider 版本要求,配置 S3 后端及 default_tags 统一打标,并对变量(如 environment)设置校验规则。
terraform {
required_version = ">= 1.11.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "production/terraform.tfstate"
region = "us-east-1"
# Native S3 locking (Terraform 1.11+)
use_lockfile = true
}
}
变量校验示例:environment 限定为 dev、staging、production。
常见资源配置
- VPC 与公有/私有子网:使用 terraform-aws-modules/vpc/aws 模块,可开启 NAT 网关(非生产可单 NAT 以优化成本)、DNS 主机名与支持、VPC Flow Logs 及对应 CloudWatch IAM 角色与日志组。
- S3 存储桶:配置版本控制、服务端加密(AES256)和公共访问阻止。
- IAM:为 EC2 创建角色,附加 AmazonSSMManagedInstanceCore 托管策略,自定义 S3 访问策略,并创建实例配置文件。
- RDS PostgreSQL:配置子网组、安全组、实例类别与存储(按环境区分)、备份保留期、维护窗口、CloudWatch 日志导出、删除保护与最终快照。
使用方式
状态管理
推荐 S3 后端原生锁(Terraform 1.11+,无需 DynamoDB),通过 use_lockfile = true 启用,可配置 encrypt 及 KMS 密钥。Terraform < 1.11 仍可使用 S3 + DynamoDB 锁(dynamodb_table)。
模块使用
可直接引用社区模块(如 VPC 模块、EKS 模块),也可创建自定义模块目录(main.tf、variables.tf、outputs.tf、README.md)后通过 source = "./modules/application" 调用。
常用工作流
- 初始化:terraform init;迁移状态:terraform init -migrate-state;重配置后端:terraform init -reconfigure。
- 计划与应用:terraform plan -out=tfplan、terraform apply tfplan,或 -target 指定资源。
- 导入资源:terraform import,例如导入 VPC、S3 存储桶、RDS 实例。
- 工作区:workspace list/new/select/show。
命令速查
包含初始化(init、init -upgrade)、计划(plan、plan -out、plan -destroy)、应用(apply、destroy)、状态(state list/show/rm/mv)、校验(fmt、fmt -recursive、validate、validate -json)、输出(output、output -json)、工作区(workspace list/new/select/delete)等命令。
适用范围与限制
常见问题与解决
资料列出了状态锁超时(terraform force-unlock)、Provider 版本冲突(更新 required_providers)、资源依赖循环(depends_on 或拆分资源)、资源已存在(terraform import)、权限不足(补充 IAM 策略)、状态漂移(plan 后 apply 或 import)等问题的成因与修复方式。
最佳实践
资源命名采用 {project}-{resource}-{environment} 格式;按环境使用条件表达式区分实例规格、备份保留与删除保护;敏感数据标记 sensitive = true 并配合 AWS Secrets Manager;通过 provider 的 default_tags 统一打标。另提供生产部署检查清单,涵盖 S3 后端加密、状态锁、Provider 版本固定、变量校验、密钥管理、最小权限、日志、备份保留、格式化与校验,以及 .terraform/ 和 *.tfstate 的 .gitignore 处理。
限制
本技能声明的版本要求为 Terraform 1.11+、AWS Provider 6.x,遵循 AWS Well-Architected Framework,最后更新时间为 2025 年 11 月。资料未提供价格、收费方式或平台限制等信息。