Terraform 项目结构 #
项目结构概述 #
良好的项目结构是可维护基础设施代码的基础。合理的组织方式可以提高代码可读性、可维护性和团队协作效率。
text
┌─────────────────────────────────────────────────────────────┐
│ 项目结构原则 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 模块化 将代码分解为可复用的模块 │
│ 分层 按职责和抽象层次组织 │
│ 环境隔离 不同环境使用独立配置 │
│ 标准化 遵循统一的命名和结构规范 │
│ │
└─────────────────────────────────────────────────────────────┘
小型项目结构 #
text
project/
├── main.tf 主要资源配置
├── variables.tf 输入变量定义
├── outputs.tf 输出值定义
├── providers.tf Provider 配置
├── versions.tf 版本约束
├── locals.tf 本地值
├── data.tf 数据源
├── terraform.tfvars 变量值
└── README.md 项目说明
中型项目结构 #
text
project/
├── environments/
│ ├── dev/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ │ ├── backend.tf
│ │ └── terraform.tfvars
│ ├── staging/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ │ ├── backend.tf
│ │ └── terraform.tfvars
│ └── prod/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ ├── backend.tf
│ └── terraform.tfvars
├── modules/
│ ├── vpc/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── outputs.tf
│ ├── ec2/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── outputs.tf
│ └── rds/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
├── shared/
│ └── remote-state/
│ └── main.tf
└── README.md
大型项目结构 #
text
organization/
├── terraform/
│ ├── modules/
│ │ ├── networking/
│ │ │ ├── vpc/
│ │ │ ├── subnet/
│ │ │ ├── security-group/
│ │ │ └── nacl/
│ │ ├── compute/
│ │ │ ├── ec2/
│ │ │ ├── asg/
│ │ │ ├── ecs/
│ │ │ └── lambda/
│ │ ├── database/
│ │ │ ├── rds/
│ │ │ ├── dynamodb/
│ │ │ └── elasticache/
│ │ └── storage/
│ │ ├── s3/
│ │ ├── efs/
│ │ └── ebs/
│ ├── environments/
│ │ ├── dev/
│ │ │ ├── networking/
│ │ │ ├── compute/
│ │ │ └── database/
│ │ ├── staging/
│ │ └── prod/
│ ├── shared/
│ │ ├── state/
│ │ ├── iam/
│ │ └── secrets/
│ └── live/
│ └── global/
└── .github/
└── workflows/
├── terraform-plan.yml
└── terraform-apply.yml
文件命名规范 #
标准文件 #
text
┌─────────────────────────────────────────────────────────────┐
│ 标准文件命名 │
├─────────────────────────────────────────────────────────────┤
│ │
│ main.tf 主要资源配置 │
│ variables.tf 输入变量定义 │
│ outputs.tf 输出值定义 │
│ providers.tf Provider 配置 │
│ versions.tf 版本约束 │
│ backend.tf 后端配置 │
│ locals.tf 本地值 │
│ data.tf 数据源 │
│ terraform.tfvars 变量值文件 │
│ README.md 项目文档 │
│ │
└─────────────────────────────────────────────────────────────┘
资源文件 #
text
┌─────────────────────────────────────────────────────────────┐
│ 资源文件命名 │
├─────────────────────────────────────────────────────────────┤
│ │
│ networking.tf 网络相关资源 │
│ compute.tf 计算资源 │
│ database.tf 数据库资源 │
│ storage.tf 存储资源 │
│ security.tf 安全相关资源 │
│ monitoring.tf 监控资源 │
│ iam.tf IAM 资源 │
│ │
└─────────────────────────────────────────────────────────────┘
模块结构 #
基本模块 #
text
modules/
└── vpc/
├── main.tf
├── variables.tf
├── outputs.tf
└── README.md
完整模块 #
text
modules/
└── vpc/
├── main.tf
├── variables.tf
├── outputs.tf
├── versions.tf
├── providers.tf
├── locals.tf
├── data.tf
├── README.md
├── LICENSE
└── examples/
├── basic/
│ ├── main.tf
│ └── outputs.tf
└── complete/
├── main.tf
└── outputs.tf
环境管理 #
目录隔离 #
text
environments/
├── dev/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ ├── backend.tf
│ └── terraform.tfvars
├── staging/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ ├── backend.tf
│ └── terraform.tfvars
└── prod/
├── main.tf
├── variables.tf
├── outputs.tf
├── backend.tf
└── terraform.tfvars
工作空间 #
text
project/
├── main.tf
├── variables.tf
├── outputs.tf
├── providers.tf
├── environments/
│ ├── dev.tfvars
│ ├── staging.tfvars
│ └── prod.tfvars
└── terraform.tfstate.d/
├── dev/
├── staging/
└── prod/
分层架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 分层架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用层 │
│ └── 应用配置、环境变量 │
│ │
│ 服务层 │
│ └── EC2、ECS、Lambda、Kubernetes │
│ │
│ 数据层 │
│ └── RDS、DynamoDB、ElastiCache、S3 │
│ │
│ 网络层 │
│ └── VPC、Subnet、Security Group、Route Table │
│ │
│ 基础层 │
│ └── IAM、KMS、状态存储 │
│ │
└─────────────────────────────────────────────────────────────┘
最佳实践 #
1. 保持一致性 #
text
所有模块使用相同的文件结构
所有环境使用相同的目录结构
遵循统一的命名规范
2. 文档化 #
markdown
每个项目有 README.md
每个模块有 README.md
变量有描述
输出有描述
3. 版本控制 #
text
使用 Git 管理代码
使用 .gitignore 排除敏感文件
使用分支进行开发
使用 PR 进行代码审查
4. 状态管理 #
text
使用远程状态
启用状态锁定
启用版本控制
分离环境状态
下一步 #
掌握了项目结构后,接下来学习 命名规范,了解 Terraform 资源命名的最佳实践!
最后更新:2026-03-29