用途
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 技能形式提供,需先阅读详细指南再执行。指南中包含完整流程与参考资料,其安全、前置条件与验证要求为强制内容。聚焦任务可只加载相关章节,端到端任务需完整阅读。
限制
- 仅在任务明确匹配上述范围时使用该技能。
- 不应将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。