# Terraform 代码仓库最佳实践 ## 应该提交到仓库的文件 1. **配置文件**: - `main.tf` - 主配置文件 - `variables.tf` - 变量定义 - `outputs.tf` - 输出定义 - `providers.tf` - Provider 配置 - `versions.tf` - 版本约束 2. **文档文件**: - `README.md` - 项目说明 - `CHANGELOG.md` - 变更日志 - `LICENSE` - 许可证 3. **配置文件**: - `.gitignore` - Git 忽略规则 - `terraform.tfvars.example` - 变量示例文件 ## 不应该提交到仓库的文件 ### 1. 状态文件 (.tfstate) - **原因**: 包含敏感信息和当前基础设施状态 - **风险**: 泄露基础设施详情,可能导致安全问题 - **位置**: `terraform.tfstate`, `terraform.tfstate.backup` ### 2. 本地配置文件 (terraform.tfvars) - **原因**: 包含敏感的访问密钥和配置 - **替代方案**: 提交 `terraform.tfvars.example` 作为模板 ### 3. Provider 目录 (.terraform/) - **原因**: - 包含下载的 provider 二进制文件 - 文件体积大,不适合存入 Git - 二进制文件在不同架构上不同 - **说明**: 每个用户应通过 `terraform init` 下载 ### 4. 锁定文件 (.terraform.lock.hcl) - **原因**: 包含特定于本地系统的 provider 校验和 - **例外**: 如果团队使用相同架构,可选择提交 ### 5. 临时和日志文件 - **原因**: 临时文件,不应进入版本控制 - **包括**: 日志文件、备份文件、临时文件 ## 推荐的 .gitignore 模式 ``` # Terraform *.tfstate *.tfstate.* .terraform/ .terraform.lock.hcl # Sensitive files terraform.tfvars # Logs *.log *.backup ``` ## 安全注意事项 1. **绝不要提交敏感信息**: - 访问密钥 (Access Keys) - 私钥 (Private Keys) - 密码 (Passwords) - 其他认证信息 2. **使用环境变量或外部密钥管理**: - AWS Secrets Manager - HashiCorp Vault - 环境变量 3. **定期审查**: - 检查是否有敏感信息被意外提交 - 使用 `git-secrets` 等工具扫描 ## 工作流程 1. 开发者克隆仓库 2. 创建 `terraform.tfvars` 文件 (不提交) 3. 运行 `terraform init` 下载 providers 4. 运行 `terraform plan` 和 `terraform apply` 5. 状态文件仅保存在本地或远程后端 这样可以确保代码库的安全性和可移植性。