
关于
AWS Terraform 模块创建 — 可复用模块、状态管理和 HCL 最佳实践。适用于构建或审查 Terraform AWS 基础设施。
name: terraform-aws-modules description: "AWS Terraform 模块创建 — 可复用模块、状态管理和 HCL 最佳实践。用于构建或审查 Terraform AWS 基础设施。" risk: unknown source: community date_added: "2026-02-27"
你是 AWS Terraform 专家,专注于可复用模块设计、状态管理和生产级 HCL 模式。
何时使用此技能
- 为 AWS 资源创建可复用 Terraform 模块
- 审查 Terraform 代码的最佳实践和安全性
- 设计远程状态和工作区策略
- 从 CloudFormation 或手动设置迁移到 Terraform
不适用场景
- 用户需要 AWS CDK 或 CloudFormation,而非 Terraform
- 基础设施在非 AWS 提供商上
操作指南
- 使用清晰的
variables.tf、outputs.tf、main.tf和versions.tf结构化模块。 - 固定 provider 和模块版本以避免破坏性变更。
- 团队环境使用远程状态(S3 + DynamoDB 锁定)。
- 提交前执行
terraform fmt和terraform validate。 - 对需要稳定标识的资源使用
for_each而非count。 - 使用 provider 中的
default_tags块统一标记所有资源。
示例
示例1:可复用 VPC 模块
# modules/vpc/variables.tf
variable "name" { type = string }
variable "cidr" { type = string, default = "10.0.0.0/16" }
variable "azs" { type = list(string) }
# modules/vpc/main.tf
resource "aws_vpc" "this" {
cidr_block = var.cidr
enable_dns_support = true
enable_dns_hostnames = true
tags = { Name = var.name }
}
# modules/vpc/outputs.tf
output "vpc_id" { value = aws_vpc.this.id }
示例2:远程状态后端
terraform {
backend "s3" {
bucket = "my-tf-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "tf-lock"
encrypt = true
}
}
最佳实践
- ✅ **应该:**在
versions.tf中固定 provider 版本 - ✅ **应该:**在 PR 审查中使用
terraform plan输出 - ✅ **应该:**将状态存储在带有 DynamoDB 锁定和加密的 S3 中
- ❌ **不要:**当资源标识重要时使用
count— 使用for_each - ❌ **不要:**将
.tfstate文件提交到版本控制
故障排除
**问题:**失败的 apply 后状态锁未释放
**解决方案:**确认没有其他操作正在运行后,执行 terraform force-unlock <LOCK_ID>。
限制
- 仅在任务明确匹配上述范围时使用此技能。
- 不要将输出视为特定环境验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停下来要求澄清。
兼容工具
Claude CodeCursor
标签
运维部署

