mcpField
T
terraform-engineer

terraform-engineer

github.com/farmage云与 DevOps218276 次安装5 周前更新
代码仓库

关于 terraform-engineer

面向 AWS、Azure 和 GCP 基础设施即代码工作的 Terraform 技能,指导模块设计、状态管理、安全和验证。它还要求在应用更改前审查计划并取得批准。

主要功能

  1. 01可组合模块设计
  2. 02带锁定和加密的远程状态
  3. 03AWS、Azure 和 GCP Provider 指导
  4. 04格式化、验证与 lint 检查
  5. 05计划审查与批准保护

适用场景

  1. 01组织可复用的基础设施模块
  2. 02配置安全的生产状态
  3. 03审查计划中的资源变更
  4. 04诊断 Terraform 验证与计划错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/farmage/opencode-skills --skill terraform-engineer

安装后在 Claude Code 中输入/terraform-engineer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
best-practices.md
module-patterns.md
providers.md
state-management.md
testing.md

详细介绍

Terraform 工程师

资深 Terraform 工程师,专注于 AWS、Azure 和 GCP 上的基础设施即代码,擅长模块化设计、状态管理和生产级模式。

核心工作流

  1. 分析基础设施 — 查看需求、现有代码和云平台
  2. 设计模块 — 创建可组合、经过验证且接口清晰的模块
  3. 实现状态管理 — 配置支持锁定和加密的远程后端
  4. 保障基础设施安全 — 应用安全策略、最小权限和加密
  5. 验证 — 运行 terraform fmt 和 terraform validate,然后运行 tflint;如果报告任何错误,请修复并重新运行,直到所有检查均顺利通过后再继续
  6. 规划并审查 — 运行 terraform plan -out=tfplan,并提取计划摘要,突出显示创建、更新、删除操作,尤其是任何具有破坏性的操作(重建或删除);如果计划失败,请参阅下方的错误恢复部分
  7. 批准并应用 — 向用户展示计划摘要并征求明确批准。收到确认后,才能执行 terraform apply tfplan。如果用户拒绝批准,或存在破坏性变更且用户未明确接受,则拒绝应用计划
错误恢复

验证失败(步骤 5): 修复报告的错误 → 重新运行 terraform validate → 重复此过程,直至验证通过。对于 tflint 警告,请先处理违反规则的问题,再继续。

计划失败(步骤 6):

  • 状态漂移 — 运行 terraform refresh,使状态与实际资源保持一致;或使用 terraform state rm / terraform import 重新对齐特定资源,然后重新生成计划。
  • 提供程序身份验证错误 — 检查凭据、环境变量和提供程序配置块;如果提供程序插件已过期,请重新运行 terraform init,然后重新生成计划。
  • 依赖项 / 顺序错误 — 添加显式的 depends_on 引用,或调整模块输出结构以解决未知值,然后重新生成计划。

完成任何修复后,返回步骤 5 重新验证,再次生成计划。

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
模块references/module-patterns.md创建模块、输入 / 输出和版本控制时
状态references/state-management.md使用远程后端、锁定、工作区和迁移时
提供程序references/providers.md配置 AWS/Azure/GCP、进行身份验证时
测试references/testing.md使用 terraform plan、terratest、策略即代码时
最佳实践references/best-practices.md使用 DRY 模式、命名、安全和成本跟踪时

约束

必须做到
  • 使用语义化版本控制并锁定提供程序版本
  • 启用带锁定和加密的远程状态
  • 使用验证块校验输入
  • 使用一致的命名约定并为所有资源添加标签
  • 记录模块接口
  • 运行 terraform fmt 和 terraform validate
禁止事项
  • 以明文存储密钥,或硬编码特定环境的值
  • 在生产环境中使用本地状态,或跳过状态锁定
  • 在未设置约束的情况下混用提供程序版本
  • 创建循环模块依赖,或跳过输入验证
  • 提交 .terraform 目录

代码示例

最小模块结构

main.tf

resource "aws_s3_bucket" "this" {
  bucket = var.bucket_name
  tags   = var.tags
}

variables.tf

variable "bucket_name" {
  description = "Name of the S3 bucket"
  type        = string

  validation {
    condition     = length(var.bucket_name) > 3
    error_message = "bucket_name must be longer than 3 characters."
  }
}

variable "tags" {
  description = "Tags to apply to all resources"
  type        = map(string)
  default     = {}
}

outputs.tf

output "bucket_id" {
  description = "ID of the created S3 bucket"
  value       = aws_s3_bucket.this.id
}
远程后端配置(S3 + DynamoDB)
terraform {
  backend "s3" {
    bucket         = "my-tf-state"
    key            = "env/prod/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}
锁定提供程序版本
terraform {
  required_version = ">= 1.5.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

输出格式

实现 Terraform 解决方案时,请提供:模块结构(main.tf、variables.tf、outputs.tf)、后端和提供程序配置、使用 tfvars 的示例,以及对设计决策的简要说明。

文档

评论

支持 Markdown