Terraform Module Library
Seth HobsonCommunityCreated by Seth Hobson
- Skill
- Guidelines
- Cloud and DevOps
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a standardized framework for developing, structuring, and testing Terraform modules. It emphasizes infrastructure-as-code best practices, including modular design, input validation, semantic versioning, and automated testing with Terratest. By following these patterns, teams can create consistent, multi-cloud compatible infrastructure components that are easier to maintain, document, and compose into larger systems.
What it does
- Defines a standard directory structure for Terraform modules
- Provides patterns for input variables, outputs, and provider versioning
- Outlines best practices for resource tagging and conditional logic
- Demonstrates how to implement automated testing using Terratest
- Offers guidance on module composition for complex infrastructure
- Includes specific architectural patterns for AWS and OCI services
When to use it
- When you need to standardize cloud provisioning across your organization
- When building reusable infrastructure components for multi-cloud environments
- When you want to enforce infrastructure-as-code best practices
- When creating complex infrastructure that requires modular composition
- When establishing a library of tested, production-ready cloud modules
Advantages
- Promotes consistency and reusability across cloud providers
- Simplifies maintenance through modular design and documentation
- Ensures higher quality infrastructure via automated testing
- Facilitates easier scaling of cloud resources
- Reduces configuration drift through standardized patterns
Usage examples
- “How should I structure a new Terraform module for AWS?”
- The agent provides the recommended directory layout, including folders for main.tf, variables.tf, outputs.tf, examples, and tests.
- “What are the best practices for validating input variables in Terraform?”
- The agent explains the use of validation blocks with regex conditions to ensure input data integrity.
- “How can I test my Terraform module using Terratest?”
- The agent provides a Go-based test example that initializes, applies, and validates module outputs.
- “Show me how to compose multiple Terraform modules together.”
- The agent demonstrates how to pass outputs from one module (e.g., a VPC) as inputs to another (e.g., an RDS instance).
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/wshobson/terraform-module-library/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip terraform-module-library.zip -d .agents/skills
Documentation by Seth Hobson
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.goAWS VPC Module Example
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(
{
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:
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:
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
Use semantic versioning for modules
Document all variables with descriptions
Provide examples in examples/ directory
Use validation blocks for input validation
Output important attributes for module composition
Pin provider versions in versions.tf
Use locals for computed values
Implement conditional resources with count/for_each
Test modules with Terratest
Tag all resources consistently
Reference: See references/aws-modules.md and references/oci-modules.md
Module Composition
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
// tests/vpc_test.go
package 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 decisionscost-optimization- For cost-effective designs
Files
- ATTRIBUTION.mdAdded by AutoGineer1012 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md5.5 KiB
- references/aws-modules.md1.3 KiB
- references/oci-modules.md1.4 KiB
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Seth Hobson
- Publisher
- Seth Hobson (Community)
- Source
- wshobson/agents · plugins/cloud-infrastructure/skills/terraform-module-library · commit 4bde316
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Seth Hobson or Seth Hobson.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download terraform-module-library.zip