SuperAPI AI 工具集

terraform-style-guide

部署与运维

查看项目

更新于 10-15 13:10

技能介绍

Terraform Style Guide 是一个面向 Terraform 代码编写与审查的技能,目标是生成并维护符合 HashiCorp 官方风格约定和最佳实践的 HCL 代码。

【用途】在编写、审查或生成 Terraform 配置时提供统一的风格与规范依据,并覆盖安全加固要求。

【代码生成策略】生成 Terraform 代码时:先写 provider 配置和版本约束;在依赖资源之前创建数据源;按依赖顺序构建资源;为关键资源属性添加输出;所有可配置值都使用变量。

【文件组织】terraform.tf 存放 Terraform 和 provider 版本要求;providers.tf 存放 provider 配置;main.tf 存放主要资源和数据源;variables.tf 存放输入变量声明(按字母顺序);outputs.tf 存放输出值声明(按字母顺序);locals.tf 存放本地值声明。文档给出了 variables.tf、locals.tf、main.tf、outputs.tf 的示例结构。

【代码格式】每层缩进使用两个空格(不用制表符);连续参数的对齐等号;参数位于块之前,元参数优先;lifecycle 放在最后。块顺序示例中先写元参数 count,再写参数 ami、instance_type,然后写 root_block_device 块,最后是 lifecycle 块。

【命名约定】所有名称使用小写加下划线;使用描述性名词,排除资源类型;具体且有意义;资源名必须为单数,不能用复数;当特定描述性名称冗余或不可用且仅存在一个实例时,默认使用 main。文档给出反例与正例,如 resource "aws_instance" "web_api" {}、resource "aws_vpc" "main" {}、variable "application_name" {}。

【变量与输出】每个变量必须包含 type 和 description;文档展示 instance_type 变量的默认值与 validation,以及 database_password 变量使用 sensitive = true。每个输出必须包含 description;文档展示 instance_id 输出与 database_password 输出(sensitive = true)。

【动态资源创建】优先使用 for_each 而不是 count;文档给出 count 反例和 for_each 正例(variable "instance_names" 为 set(string),默认 ["web-1", "web-2", "web-3"],资源中使用 each.key)。count 用于条件创建,示例为 aws_cloudwatch_metric_alarm 使用 count = var.enable_monitoring ? 1 : 0。

【安全最佳实践】生成代码时应用安全加固:默认启用静态加密;在适用处配置私有网络;对安全组应用最小权限原则;启用日志和监控;绝不硬编码凭据或密钥;用 sensitive = true 标记敏感输出。文档给出安全 S3 存储桶示例,包括 aws_s3_bucket、版本控制、服务端加密配置(aws:kms 与 kms_master_key_id)以及公共访问阻止。

【版本固定与 Provider 配置】terraform 块中 required_version 使用 ">= 1.7",required_providers 中 aws 来源 hashicorp/aws、版本 "~> 5.0"。版本约束运算符包括 = 1.0.0(精确)、>= 1.0.0(大于等于)、~> 1.0(允许最右组件递增)、>= 1.0, < 2.0(版本范围)。provider 配置示例包含 region 与 default_tags;多区域使用 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 验证;文件按标准结构组织;所有变量有 type 和 description;所有输出有 description;资源名使用带下划线的描述性名词;显式固定版本约束;敏感值标记 sensitive = true;无硬编码凭据或密钥;应用安全最佳实践。