Terraform Module Library

作者 wshobson46891e7e60da无许可证收录于 2026年10月8日更新于 2026年10月8日

Build reusable Terraform modules for AWS, Azure, GCP, and OCI infrastructure following infrastructure-as-code best practices. Use when creating infrastructure modules, standardizing cloud provisioning, or implementing reusable IaC components.

仅含说明DevOps & Cloud
AI 生成的概览

指导创建可复用的 Terraform 模块,覆盖 AWS、Azure、GCP 与 OCI 基础设施。

功能
该技能提供构建可复用 Terraform 模块的模式与规范,涵盖 AWS、Azure、GCP 和 OCI 上常见的云基础设施,如 VPC、Kubernetes 集群、数据库和存储。它说明标准模块结构(main.tf、variables.tf、outputs.tf、versions.tf、examples 与 tests),给出带变量、输出和校验的 AWS VPC 完整示例,并列出语义化版本、固定 provider 版本、统一打标签和 Terratest 测试等最佳实践。它还介绍模块组合,即一个模块的输出作为另一个模块的输入。两个参考文件分别介绍 AWS 与 OCI 模块细节。
适用场景
适用于创建可复用基础设施模块、统一跨云厂商的资源供给,或制定组织级 Terraform 规范。也适合希望落地基础设施即代码最佳实践、构建多云兼容组件的团队。
运行要求
需要 Terraform 及其 HCL 配置语言,以及所针对的 AWS、Azure、GCP 或 OCI 云厂商凭据。测试示例依赖 Go、Terratest 与 testify。该技能不附带脚本,仅为说明文档与参考文档。

Terraform Module Library

Production-ready Terraform module patterns for AWS, Azure, GCP, and OCI infrastructure.

Purpose

Create reusable, well-tested Terraform modules for common cloud infrastructure patterns across multiple cloud providers.

When to Use

  • Build reusable infrastructure components
  • Standardize cloud resource provisioning
  • Implement infrastructure as code best practices
  • Create multi-cloud compatible modules
  • Establish organizational Terraform standards

Module Structure

terraform-modules/├── aws/│   ├── vpc/│   ├── eks/│   ├── rds/│   └── s3/├── azure/│   ├── vnet/│   ├── aks/│   └── storage/├── gcp/│   ├── vpc/│   ├── gke/│   └── cloud-sql/└── oci/    ├── vcn/    ├── oke/    └── object-storage/

Standard Module Pattern

module-name/├── main.tf          # Main resources├── variables.tf     # Input variables├── outputs.tf       # Output values├── versions.tf      # Provider versions├── README.md        # Documentation├── examples/        # Usage examples│   └── complete/│       ├── main.tf│       └── variables.tf└── tests/           # Terratest files    └── module_test.go

AWS VPC Module Example

main.tf:

hcl
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(    {      Name = var.name    },    var.tags  )}
resource "aws_subnet" "private" {  count             = length(var.private_subnet_cidrs)  vpc_id            = aws_vpc.main.id  cidr_block        = var.private_subnet_cidrs[count.index]  availability_zone = var.availability_zones[count.index]
  tags = merge(    {      Name = "${var.name}-private-${count.index + 1}"      Tier = "private"    },    var.tags  )}
resource "aws_internet_gateway" "main" {  count  = var.create_internet_gateway ? 1 : 0  vpc_id = aws_vpc.main.id
  tags = merge(    {      Name = "${var.name}-igw"    },    var.tags  )}

variables.tf:

hcl
variable "name" {  description = "Name of the VPC"  type        = string}
variable "cidr_block" {  description = "CIDR block for VPC"  type        = string  validation {    condition     = can(regex("^([0-9]{1,3}\\.){3}[0-9]{1,3}/[0-9]{1,2}$", var.cidr_block))    error_message = "CIDR block must be valid IPv4 CIDR notation."  }}
variable "availability_zones" {  description = "List of availability zones"  type        = list(string)}
variable "private_subnet_cidrs" {  description = "CIDR blocks for private subnets"  type        = list(string)  default     = []}
variable "enable_dns_hostnames" {  description = "Enable DNS hostnames in VPC"  type        = bool  default     = true}
variable "tags" {  description = "Additional tags"  type        = map(string)  default     = {}}

outputs.tf:

hcl
output "vpc_id" {  description = "ID of the VPC"  value       = aws_vpc.main.id}
output "private_subnet_ids" {  description = "IDs of private subnets"  value       = aws_subnet.private[*].id}
output "vpc_cidr_block" {  description = "CIDR block of VPC"  value       = aws_vpc.main.cidr_block}

Best Practices

  1. Use semantic versioning for modules
  2. Document all variables with descriptions
  3. Provide examples in examples/ directory
  4. Use validation blocks for input validation
  5. Output important attributes for module composition
  6. Pin provider versions in versions.tf
  7. Use locals for computed values
  8. Implement conditional resources with count/for_each
  9. Test modules with Terratest
  10. Tag all resources consistently

Reference: See references/aws-modules.md and references/oci-modules.md

Module Composition

hcl
module "vpc" {  source = "../../modules/aws/vpc"
  name               = "production"  cidr_block         = "10.0.0.0/16"  availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
  private_subnet_cidrs = [    "10.0.1.0/24",    "10.0.2.0/24",    "10.0.3.0/24"  ]
  tags = {    Environment = "production"    ManagedBy   = "terraform"  }}
module "rds" {  source = "../../modules/aws/rds"
  identifier     = "production-db"  engine         = "postgres"  engine_version = "15.3"  instance_class = "db.t3.large"
  vpc_id     = module.vpc.vpc_id  subnet_ids = module.vpc.private_subnet_ids
  tags = {    Environment = "production"  }}

Testing

go
// tests/vpc_test.gopackage test
import (    "testing"    "github.com/gruntwork-io/terratest/modules/terraform"    "github.com/stretchr/testify/assert")
func TestVPCModule(t *testing.T) {    terraformOptions := &terraform.Options{        TerraformDir: "../examples/complete",    }
    defer terraform.Destroy(t, terraformOptions)    terraform.InitAndApply(t, terraformOptions)
    vpcID := terraform.Output(t, terraformOptions, "vpc_id")    assert.NotEmpty(t, vpcID)}

Related Skills

  • multi-cloud-architecture - For architectural decisions
  • cost-optimization - For cost-effective designs

来源与署名

来源:wshobson/agents位于plugins/cloud-infrastructure/skills/terraform-module-library提交46891e7

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架