SuperAPI AI 工具集

terraform-skill

部署与运维

查看项目

更新于 10-15 14:12

技能介绍

用途

Terraform Skill 是面向 Claude 的技能,提供 Terraform 与 OpenTofu 的综合性指导,覆盖测试、模块、CI/CD 与生产环境模式。其内容基于 terraform-best-practices.com 以及企业实践经验。

在执行该技能前,应先阅读详细指南。指南保留了完整流程与参考资料,其中的安全、前置条件与验证要求应视为强制要求。对于聚焦型任务,可加载相关章节;对于端到端任务,应完整阅读指南。

适用场景

在以下情况激活该技能:

  • 创建新的 Terraform 或 OpenTofu 配置或模块
  • 为 IaC 代码搭建测试基础设施
  • 在测试方法之间做选择(validate、plan、测试框架)
  • 设计多环境部署结构
  • 为基础设施即代码实现 CI/CD
  • 审查或重构既有 Terraform/OpenTofu 项目
  • 在模块模式或状态管理方案之间做选择

不适用于以下情况:

  • 基础 Terraform/OpenTofu 语法问题(Claude 已掌握)
  • 特定 Provider 的 API 参考(应改为链接到文档)
  • 与 Terraform/OpenTofu 无关的云平台问题

主要能力:count 与 for_each 的选择

技能提供快速决策指南:

  • 布尔条件(创建或不创建):使用 count = condition ? 1 : 0,适合简单的开关切换。
  • 简单数字复制:使用 count = 3,适合固定数量的相同资源。
  • 条目可能被重排或删除:使用 for_each = toset(list),可获得稳定的资源地址。
  • 按键引用:使用 for_each = map,可按名称访问资源。
  • 多个具名资源:使用 for_each,可维护性更好。

常见模式示例:

布尔条件:

# ✅ GOOD - Boolean condition
resource "aws_nat_gateway" "this" {
  count = var.create_nat_gateway ? 1 : 0
  # ...
}

使用 for_each 实现稳定寻址:

# ✅ GOOD - Removing "us-east-1b" only affects that subnet
resource "aws_subnet" "private" {
  for_each = toset(var.availability_zones)

  availability_zone = each.key
  # ...
}

# ❌ BAD - Removing middle AZ recreates all subsequent subnets
resource "aws_subnet" "private" {
  count = length(var.availability_zones)

  availability_zone = var.availability_zones[count.index]
  # ...
}

迁移指南与详细示例参见:Code Patterns: Count vs For_Each。

安全与合规

基本安全检查命令:

# Static security scanning
trivy config .
checkov -d .

应避免的常见问题:

❌ 不要:

  • 在变量中存储密钥
  • 使用默认 VPC
  • 跳过加密
  • 将安全组开放到 0.0.0.0/0

✅ 应当:

  • 使用 AWS Secrets Manager / Parameter Store
  • 创建专用 VPC
  • 启用静态加密
  • 使用最小权限安全组

详细安全指导参见:Security & Compliance Guide,涵盖 Trivy/Checkov 集成、密钥管理、状态文件安全与合规测试。

使用方式

该技能以 Claude 技能形式提供,需先阅读详细指南再执行。指南中包含完整流程与参考资料,其安全、前置条件与验证要求为强制内容。聚焦任务可只加载相关章节,端到端任务需完整阅读。

限制

  • 仅在任务明确匹配上述范围时使用该技能。
  • 不应将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。