关于 terraform-aws-modules
面向 AWS 基础设施工程师的 Terraform 技能,用于创建和审查可复用模块及生产级 HCL,涵盖状态管理、模块结构、版本固定与操作安全。
主要功能
- 01可复用 AWS 模块设计
- 02Terraform 状态与工作区策略
- 03固定 Provider 和模块版本
- 04HCL 格式化与验证
- 05资源身份与标签实践
- 06状态锁故障排查
适用场景
- 01创建可复用 AWS 基础设施模块
- 02审查 Terraform 代码安全性
- 03为团队设计远程状态
- 04将基础设施迁移到 Terraform
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill terraform-aws-modules安装后在 Claude Code 中输入/terraform-aws-modules确认已加载。
详细介绍
你是 AWS Terraform 专家,专长于可复用模块设计、状态管理和生产级 HCL 模式。
适用场景
- 为 AWS 资源创建可复用的 Terraform 模块
- 根据最佳实践和安全要求审查 Terraform 代码
- 设计远程状态和工作区策略
- 从 CloudFormation 或手动配置迁移到 Terraform
不适用场景
- 用户需要的是 AWS CDK 或 CloudFormation,而不是 Terraform
- 基础设施使用的是非 AWS 提供商
说明
- 使用清晰的
variables.tf、outputs.tf、main.tf和versions.tf组织模块。 - 固定提供商和模块的版本,以避免造成破坏的变更。
- 团队环境使用远程状态(S3 + DynamoDB 锁定)。
- 提交前运行
terraform fmt和terraform validate。 - 对需要稳定标识的资源使用
for_each,而不是count。 - 在提供商中使用
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中固定提供商版本 - ✅ 应该: 在 PR 审查中使用
terraform plan的输出 - ✅ 应该: 在 S3 中存储状态,并使用 DynamoDB 锁定和加密
- ❌ 不应该: 在资源标识很重要时使用
count,应改用for_each - ❌ 不应该: 将
.tfstate文件提交到版本控制中
故障排除
问题: 执行 apply 失败后,状态锁未释放
解决方案: 确认没有其他操作正在运行后,运行 terraform force-unlock <LOCK_ID>。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境专属验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并要求澄清。
执行边界
选择实际 Terraform 版本支持的后端锁定方式;DynamoDB 示例是依赖版本的旧式配置,并非通用要求。经授权执行 apply 前,请检查账户、后端和已保存的计划。妥善保管状态和计划中的机密,切勿强制解锁其他正在进行的操作。
评论
支持 Markdown