用途
terraform-generator 用于创建、生成、编写或搭建 Terraform .tf HCL,涵盖资源、模块、provider、变量和输出。它面向需要产出生产级 Terraform 配置的场景,并声称遵循最佳实践与当前标准,同时自动集成验证和对自定义 provider 与模块的文档查询。
主要能力
该技能提供一套有序的工作流程:
- 理解需求:确定需要创建哪些基础设施资源、需要哪些 Terraform provider(如 AWS、Azure、GCP、自定义 provider 等)、是否使用模块(官方、社区或自定义)、provider 和模块的版本约束、所需的变量输入和输出,以及 state backend 配置(本地、S3、远程等)。
- 检查自定义 provider/模块:区分标准 provider(如 hashicorp/aws、hashicorp/azurerm、hashicorp/google、hashicorp/kubernetes 及其他官方 HashiCorp provider)无需查询文档;而第三方 provider(如 datadog/datadog、mongodb/mongodbatlas)、来自 Terraform Registry 的自定义模块、私有或公司专用模块、社区模块则需要查阅文档。检测到此类情况时,使用 WebSearch 查找指定版本的文档,或将 Context7 MCP 作为替代方案。
- 参考参考文件(必需):要求阅读 terraform_best_practices.md(始终必读)、provider_examples.md(生成任何 AWS、Azure、GCP 或 Kubernetes 资源时必读)、common_patterns.md(默认可选,复杂请求必读:多环境、workspace、组合、DR 或条件模式)。
- 生成 Terraform 配置:按最佳实践生成 HCL 文件,目录结构示例包含 main.tf、variables.tf、outputs.tf、versions.tf、terraform.tfvars(可选)、backend.tf(可选)。
生成时遵循的最佳实践包括:provider 配置中的 required_version 和 required_providers 版本约束;资源命名使用描述性名称、snake_case、必要时包含资源类型;变量声明包含 description、type、default 和 validation;输出值包含 description 和 value;使用 data source 引用(如 aws_ami);模块使用(如 terraform-aws-modules/vpc/aws);使用 locals 计算值;适当使用 lifecycle 规则;使用 dynamic 块处理重复配置;添加注释和文档;以及安全最佳实践(不硬编码敏感值、使用 data source、实现最小权限 IAM、默认启用加密、使用安全 backend 配置)。
该技能还要求为动态值提供 provider 感知的 data source(如 AWS 的 aws_region、aws_caller_identity、aws_availability_zones、aws_ami;Azure 的 azurerm_client_config、azurerm_subscription;GCP 的 google_client_config、google_compute_zones、google_compute_image;Kubernetes 使用模块输出或云 data source,避免硬编码 token/endpoint)。
同时要求为有状态和关键资源提供生命周期与删除保护(provider 感知),如 AWS 的 KMS、RDS、S3 数据桶、DynamoDB、ElastiCache、secrets 使用 lifecycle { prevent_destroy = true } 及服务特定的删除保护;Azure 的 Key Vaults、SQL、Storage、有状态计算使用 prevent_destroy 加 provider 特性标志/资源删除保护;GCP 的 Cloud SQL、GKE、存储、有状态计算使用 prevent_destroy 和资源级 deletion_protection = true;Kubernetes 避免破坏性替换模式并保护底层云资源。
还要求对象存储生命周期保护:使用 AWS S3 lifecycle 配置时,始终包含中止未完成分段上传的规则(abort_incomplete_multipart_upload),原因是未完成的分段上传会占用存储并产生费用,Checkov 检查 CKV_AWS_300 对 AWS 强制此项。对 Azure/GCP 对象存储,要为陈旧对象和旧版本添加等效的生命周期/保留规则。
- 校验生成的配置(必需):生成 Terraform 文件后,始终调用 devops-skills:terraform-validator 技能进行校验。该技能会:用 terraform fmt -check 检查 HCL 语法;用 terraform init 初始化配置;用 terraform validate 校验配置;用 Checkov 运行安全扫描;如要求则用 terraform plan 执行干跑测试。
关键:修复并重新校验的循环。如果任何校验或安全检查失败,必须:审查错误、修复问题、再次调用校验技能,重复直到所有检查通过,不得带着失败的检查继续。常见校验失败与修复示例包括:CKV_AWS_300(缺少中止分段上传)需添加 abort_incomplete_multipart_upload 规则;CKV_AWS_24(SSH 对 0.0.0.0/0 开放)需限制到特定 CIDR;CKV_AWS_16(RDS 未加密)需添加 storage_encrypted = true;terraform validate(无效资源参数)需查阅 provider 文档。校验期间如检测到自定义 provider,terraform-validator 技能会自动获取文档,并据此修复问题。
- 提供使用说明(必需):生成并通过所有校验后,必须提供输出格式,包括生成文件列表(只列出本次实际生成的文件,不包含占位路径或不存在的文件)、后续步骤(审查并自定义 terraform.tfvars、terraform init、terraform plan、terraform apply)、自定义说明(更新变量、配置 backend.tf 远程 state、调整资源名称/标签)和安全提醒(审查 IAM 策略与权限、确保敏感值不提交到版本控制、配置启用加密的 state backend、为团队协作设置 state 锁)。
常见生成模式
- 简单资源创建:如“创建带版本控制的 AWS S3 桶”,生成 main.tf、variables.tf、outputs.tf、versions.tf。
- 基于模块的基础设施:如“使用官方 AWS VPC 模块设置 VPC”,识别模块、搜索最新版本和文档、生成配置、校验。
- 多 provider 配置:如“跨 AWS 和 Datadog 创建基础设施”,识别标准 provider 和自定义 provider、搜索 Datadog provider 文档、生成双 provider 配置、必要时确保 provider alias、校验。
- 带依赖的复杂资源:如“创建带 ALB 和自动扩缩的 ECS 集群”,生成多个资源块与正确依赖、AMIs/可用区等 data source、locals、全面的变量和输出、隐式引用管理依赖。
错误处理
常见问题与解决方案包括:provider 未找到(确保在 required_providers 中列出、验证 source 地址格式 namespace/name、检查版本约束语法);无效资源参数(参考自定义 provider 的搜索结果、检查必需与可选参数、验证属性值类型);循环依赖(检查资源引用、必要时使用 depends_on、考虑拆分为模块);校验失败(运行 terraform-validator 获取详细错误、逐个修复、每次修复后重新校验)。
版本感知
始终考虑版本兼容性。对 Terraform 版本:使用 required_version 约束并同时包含下限和上限。如果生成的配置包含 write-only 参数(*_wo),使用 required_version = ">= 1.11, < 2.0";否则如果使用 ephemeral 构造(ephemeral 块、ephemeral 变量/输出)但没有 write-only 参数,使用 required_version = ">= 1.10, < 2.0";否则使用项目基线(默认 >= 1.8, < 2.0,除非仓库策略要求更新)。最新特性(actions、query 命令)使用 >= 1.14, < 2.0。并记录所使用的任何版本特定特性。
限制
资料未提供关于收费、价格、支持平台或实际使用效果的信息。资料中给出的 provider 版本、Terraform 版本约束等均为示例或约束建议,实际使用时需核实当前版本。资料未提供该技能的独立安装方式、账号要求或运行环境要求。