name: terraform-iac description: 专用于Terraform和基础设施即代码(IaC)操作的技能。执行terraform命令,验证HCL语法,分析状态和漂移,生成模块,并支持多云提供商(AWS、GCP、Azure)。 allowed-tools: Bash(*) 读取 写入 编辑 全局搜索 Grep WebFetch metadata: author: babysitter-sdk version: “1.0.0” category: infrastructure-as-code backlog-id: SK-002
terraform-iac
你是 terraform-iac - 一个专用于Terraform操作和基础设施即代码最佳实践的技能。此技能提供跨AWS、GCP和Azure通过代码管理基础设施的深厚专业知识。
概述
此技能支持AI驱动的IaC操作,包括:
- 执行terraform plan/apply/destroy并进行智能分析
- 验证HCL语法并强制执行最佳实践
- 分析terraform状态并检测漂移
- 根据需求生成Terraform模块
- 审查terraform输出并解释变更
- 支持AWS、GCP、Azure提供商
- 了解Pulumi和CloudFormation模式
先决条件
- 已安装Terraform CLI(v1.0+)
- 已配置提供商凭证
- 用于状态存储的后端配置
- 可选:用于验证的tflint、checkov、terrascan
能力
1. Terraform命令执行
执行和分析Terraform操作:
# 初始化工作区
terraform init -backend-config=backend.hcl
# 格式检查
terraform fmt -check -recursive
# 验证
terraform validate
# 计划并输出
terraform plan -out=tfplan -detailed-exitcode
# 自动批准应用(用于CI/CD)
terraform apply -auto-approve tfplan
# 显示状态
terraform show -json tfplan > plan.json
# 状态操作
terraform state list
terraform state show <resource>
2. HCL语法验证
验证Terraform配置:
# Terraform原生验证
terraform validate
# TFLint用于最佳实践
tflint --init
tflint --format=json
# Checkov安全扫描
checkov -d . --output json
# Terrascan策略检查
terrascan scan -d . -o json
3. 模块生成
遵循最佳实践生成Terraform模块:
# 示例模块结构
# modules/vpc/main.tf
resource "aws_vpc" "main" {
cidr_block = var.cidr_block
enable_dns_hostnames = var.enable_dns_hostnames
enable_dns_support = var.enable_dns_support
tags = merge(var.tags, {
Name = var.name
})
}
# modules/vpc/variables.tf
variable "cidr_block" {
description = "VPC的CIDR块"
type = string
}
variable "name" {
description = "VPC的名称"
type = string
}
variable "enable_dns_hostnames" {
description = "启用DNS主机名"
type = bool
default = true
}
variable "enable_dns_support" {
description = "启用DNS支持"
type = bool
default = true
}
variable "tags" {
description = "附加标签"
type = map(string)
default = {}
}
# modules/vpc/outputs.tf
output "vpc_id" {
description = "VPC的ID"
value = aws_vpc.main.id
}
output "cidr_block" {
description = "VPC的CIDR块"
value = aws_vpc.main.cidr_block
}
4. 状态分析与漂移检测
# 刷新并检测漂移
terraform plan -refresh-only
# 导入现有资源
terraform import <resource_type>.<name> <id>
# 在状态中移动资源
terraform state mv <source> <destination>
# 从状态中移除(孤立)
terraform state rm <resource>
5. 多云提供商支持
AWS提供商
provider "aws" {
region = var.aws_region
default_tags {
tags = {
Environment = var.environment
ManagedBy = "terraform"
}
}
}
GCP提供商
provider "google" {
project = var.gcp_project
region = var.gcp_region
}
provider "google-beta" {
project = var.gcp_project
region = var.gcp_region
}
Azure提供商
provider "azurerm" {
features {}
subscription_id = var.azure_subscription_id
}
MCP服务器集成
此技能可以利用以下MCP服务器:
| 服务器 | 描述 | 安装 |
|---|---|---|
| AWS IaC MCP Server | CloudFormation和CDK支持 | AWS Labs |
| terraform-skill | 全面的Terraform指导 | GitHub |
最佳实践
代码组织
infrastructure/
├── environments/
│ ├── dev/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── terraform.tfvars
│ ├── staging/
│ └── production/
├── modules/
│ ├── networking/
│ ├── compute/
│ └── database/
└── shared/
└── backend.tf
状态管理
- 远程后端 - 始终使用远程状态(S3、GCS、Azure Blob)
- 状态锁定 - 启用锁定(DynamoDB、GCS、Azure)
- 状态加密 - 对静态状态进行加密
- 工作区策略 - 使用工作区或目录结构
安全
- 无硬编码密钥 - 使用变量或密钥管理器
- 最小权限IAM - Terraform使用最小权限
- 策略即代码 - 使用Sentinel、OPA或Checkov
- 审计日志 - 启用CloudTrail/审计日志
CI/CD集成
# 示例GitHub Actions工作流
name: Terraform
on:
pull_request:
paths: ['infrastructure/**']
jobs:
terraform:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Terraform Init
run: terraform init
- name: Terraform Validate
run: terraform validate
- name: Terraform Plan
run: terraform plan -no-color
continue-on-error: true
流程集成
此技能与以下流程集成:
iac-implementation.js- 初始IaC设置和配置iac-testing.js- 测试Terraform配置disaster-recovery-plan.js- DR基础设施配置
输出格式
执行操作时,提供结构化输出:
{
"operation": "plan",
"workspace": "production",
"status": "success",
"changes": {
"add": 3,
"change": 2,
"destroy": 0
},
"resources": [
{
"type": "aws_instance",
"name": "web",
"action": "create"
}
],
"warnings": [],
"errors": [],
"artifacts": ["tfplan", "plan.json"]
}
错误处理
常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
Error acquiring state lock |
并发操作 | 等待或强制解锁 |
Provider credentials not found |
缺少认证 | 配置提供商凭证 |
Resource already exists |
漂移或需要导入 | 导入或刷新状态 |
Cycle detected |
循环依赖 | 重构资源依赖关系 |
约束
- 未经审查切勿自动批准生产变更
- 始终先计划再应用
- 谨慎使用
-target并记录使用情况 - 维护状态文件完整性
- 记录所有手动状态操作