name: terraform-module-scaffolder description: 使用标准化结构脚手架新的Terraform模块,包括main.tf、variables.tf、outputs.tf、versions.tf和README.md。当用户想要创建新的Terraform模块、设置模块结构或需要常见基础设施模式如VPC、ECS、S3或RDS模块的模板时,应使用此技能。
Terraform模块脚手架工具
此技能帮助创建遵循最佳实践和约定的结构良好的Terraform模块。
何时使用
在以下情况下使用此技能:
- 从零开始创建新的Terraform模块
- 设置标准化的模块结构
- 需要常见AWS/Azure/GCP资源的模板
- 希望确保模块遵循Terraform约定
模块结构
生成具有此标准结构的模块:
module-name/
├── main.tf # 主要资源定义
├── variables.tf # 输入变量
├── outputs.tf # 输出值
├── versions.tf # 提供商和Terraform版本约束
├── README.md # 模块文档
└── examples/ # 使用示例(可选)
└── basic/
└── main.tf
指令
1. 收集需求
询问用户:
- 模块名称是什么?
- 云提供商是什么(AWS、Azure、GCP、多云)?
- 模块应该创建什么资源?
- 任何特定的需求或约束?
2. 创建核心文件
main.tf - 包括:
- 带有清晰命名的资源定义
- 计算属性的本地值
- 如果需要,数据源
variables.tf - 包括:
- 首先必需变量,然后可选变量
- 每个变量的清晰描述
- 适当处的明智默认值
- 类型约束(字符串、数字、布尔、列表、映射、对象)
- 关键输入的验证规则
outputs.tf - 包括:
- 资源ID和ARN
- 连接信息(端点、URL)
- 其他模块可能需要计算属性
- 每个输出的清晰描述
versions.tf - 包括:
- Terraform版本约束(使用~>表示次要版本)
- 提供商版本约束
- 必需提供商块
README.md - 包括:
- 模块描述和目的
- 使用示例
- 需求部分
- 输入表(可以稍后自动生成)
- 输出表(可以稍后自动生成)
3. 应用最佳实践
- 使用一致的命名:
resource_type-purpose(例如,s3-logs、vpc-main) - 向所有可标记资源添加标签,变量用于自定义标签
- 使用
terraform fmt格式化 - 在适当处包括生命周期块
- 仅当隐式依赖不起作用时添加
depends_on - 对条件资源使用
count或for_each
4. 添加示例用法
创建 examples/basic/main.tf 显示最小工作示例:
module "example" {
source = "../.."
# 必需变量
name = "example"
# 带有常见值的可选变量
tags = {
Environment = "dev"
ManagedBy = "terraform"
}
}
验证清单
在完成前,验证:
- [ ] 所有文件使用一致的格式化(
terraform fmt) - [ ] 变量有描述和适当的类型
- [ ] 输出有描述
- [ ] 版本约束已指定
- [ ] README包括使用示例
- [ ] 模块遵循命名约定
- [ ] 标签通过变量可配置