关于 terraform-skill
为 Claude 提供 Terraform 和 OpenTofu 基础设施即代码指导的技能,涵盖测试、模块、CI/CD 和生产实践。适用于编写或审查配置、规划多环境部署及基础设施测试。
主要功能
- 01Terraform 与 OpenTofu 配置指导
- 02比较 count 与 for_each 用法
- 03覆盖测试、模块与 CI/CD
- 04说明状态文件和密钥安全
适用场景
- 01创建基础设施配置或模块
- 02为 IaC 项目设置测试
- 03规划多环境部署
- 04审查或重构 Terraform 配置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill terraform-skill安装后在 Claude Code 中输入/terraform-skill确认已加载。
附带文件references/detailed-guide.md
详细介绍
Claude 的 Terraform 技能
全面的 Terraform 和 OpenTofu 指南,涵盖测试、模块、CI/CD 和生产实践。基于 terraform-best-practices.com 和企业经验。
详细指南
执行此技能前,请阅读详细指南。该指南保留了完整的流程和参考资料。必须遵守其中的安全要求、前置条件和验证要求。针对特定任务,请加载相关章节;进行端到端工作时,请通读整份指南。
何时使用此技能
在以下情况下启用此技能:
- 创建新的 Terraform 或 OpenTofu 配置或模块
- 为 IaC 代码搭建测试基础设施
- 选择测试方法(validate、plan、框架)
- 规划多环境部署结构
- 为基础设施即代码实施 CI/CD
- 审查或重构现有 Terraform/OpenTofu 项目
- 选择模块模式或状态管理方法
以下情况不要使用此技能:
- 基础 Terraform/OpenTofu 语法问题(Claude 已了解)
- 特定提供商的 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]
# ...
}
**迁移指南和详细示例请参阅:**代码模式:Count 与 For_Each
安全与合规
需要时,通过获批的密钥渠道使用敏感输入;sensitive = true 只能在常规显示中隐藏值,不会加密状态文件或 plan 文件。确保后端访问、锁定、加密和 plan 工件的安全。不要将 Secrets Manager 数据读入 Terraform 后,就认定其值不会进入状态文件。仅在所选 Terraform/提供商版本支持时,使用受支持的临时参数或只写参数。
基本安全检查
# Static security scanning
trivy config .
checkov -d .
应避免的常见问题
❌ 不要:
- 硬编码密钥,或假设敏感变量能让值不进入状态文件
- 使用默认 VPC
- 跳过加密
- 将安全组对 0.0.0.0/0 开放
✅ 应该:
- 使用 AWS Secrets Manager / Parameter Store
- 创建专用 VPC
- 启用静态加密
- 遵循最小权限原则配置安全组
详细安全指南请参阅:
- 安全与合规指南 - Trivy/Checkov 集成、密钥管理、状态文件安全、合规性测试
限制
- 仅当任务明确符合上述范围时才使用此技能。
- 不要将输出视为特定环境验证、测试或专家审查的替代品。
- 如果缺少必要输入、权限、安全边界或成功标准,请停止并请求澄清。
评论
支持 Markdown