运维部署
编写或审查 Terraform 配置时按…
适用于编写、审查或生成 Terraform HCL 配置,统一文件组织、格式、命名、变量、版本、安全与提交规范。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
编写或审查 Terraform 配置时按特定
解决思路
- 从 provider 配置和版本约束开始生成 Terraform 代码。
- 在依赖资源之前创建 data sources。
- 按依赖顺序构建 resources。
- 为关键资源属性添加 outputs。
- 对所有可配置值使用 variables。
- 将 Terraform 和 provider 版本要求放在 `terraform.tf`。
- 将 provider 配置放在 `providers.tf`。
- 将主要 resources 和 data sources 放在 `main.tf`。
- 将输入变量声明放在 `variables.tf`,并按字母顺序排列。
- 将输出值声明放在 `outputs.tf`,并按字母顺序排列。
- 将 local 值声明放在 `locals.tf`。
- 每个嵌套层级使用两个空格缩进,不使用 tab。
- 对连续的参数等号进行对齐。
- 块组织时先写参数,再写块;meta-arguments 放在最前。
- 将 `lifecycle` 块放在最后。
- 所有名称使用小写加下划线。
- 使用描述性名词命名,并排除资源类型。
- 命名要具体且有意义。
- 资源名使用单数,不用复数。
- 当具体描述名冗余或不可用且只有一个实例时,默认使用 `main`。
- 每个 variable 必须包含 `type` 和 `description`。
- 使用 `validation` 块校验变量,包含 `condition` 和 `error_message`。
- 对敏感变量设置 `sensitive = true`。
- 每个 output 必须包含 `description`。
- 对敏感 output 设置 `sensitive = true`。
- 创建多个资源时优先使用 `for_each` 而不是 `count`。
- 使用 `for_each` 时可通过 `each.key` 生成名称或标签。
- 需要条件创建资源时使用 `count`,例如 `count = var.enable_monitoring ? 1 : 0`。
- 参考 `SECURITY.md`,遵循加密资源、防止敏感数据进入 state、安全配置等指导。
- 每个 provider 使用最新主版本,Terraform 使用最新次版本,除非受依赖锁文件或其他模块约束。
- 版本约束操作符:`= 1.0.0` 表示精确版本。
- 版本约束操作符:`>= 1.0.0` 表示大于等于。
- 版本约束操作符:`~> 1.0` 表示允许最右侧组件递增。
- 版本约束操作符:`>= 1.0, < 2.0` 表示版本范围。
- 配置 provider 时设置 `region` 等区域参数。
- 使用 `default_tags` 设置通用标签,例如 `ManagedBy` 和 `Project`。
- 多区域部署时使用带 `alias` 的 provider。
- 不要提交 `terraform.tfstate` 和 `terraform.tfstate.backup`。
- 不要提交 `.terraform/` 目录。
- 不要提交 `*.tfplan`。
- 不要提交包含敏感数据的 `.tfvars` 文件。
- 始终提交所有 `.tf` 配置文件。
- 始终提交 `.terraform.lock.hcl` 依赖锁文件。
- 提交前运行 `terraform fmt -recursive`。
- 提交前运行 `terraform validate`。
- 使用 `tflint` 进行 lint 和最佳实践检查。
- 使用 `checkov` / `tfsec` 进行安全扫描。
- 代码审查时确认已用 `terraform fmt` 格式化。
- 代码审查时确认已用 `terraform validate` 校验配置。
- 代码审查时确认文件按标准结构组织。
- 代码审查时确认所有 variables 都有 `type` 和 `description`。
- 代码审查时确认所有 outputs 都有 `description`。
- 代码审查时确认资源名使用带下划线的描述性名词。
- 代码审查时确认版本约束已显式固定。
- 代码审查时确认敏感值已标记 `sensitive = true`。
- 代码审查时确认没有硬编码凭据或密钥。
- 代码审查时确认已应用安全最佳实践。
适用边界 · 注意事项
- 不适用于非 Terraform 的 IaC 或配置(如 CloudFormation、Pulumi、Kubernetes YAML)。
- 当项目已有强制风格、CI 规则或安全规范且与本文冲突时,优先遵循项目规则。
- 当依赖锁文件或其他模块约束了版本时,不要盲目升级到最新版本。