Files
terraform/volcengine/GIT_EXCLUDES.md

2.3 KiB

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 planterraform apply
  5. 状态文件仅保存在本地或远程后端

这样可以确保代码库的安全性和可移植性。