Expert guidance for creating, managing, and using Terraform modules. Use this skill when the user wants to create reusable infrastructure components, standardize Terraform patterns, or needs help with module structure and best practices for AWS, GCP, or Azure.
Expert guidance for creating, managing, and using Terraform modules. Use this skill when the user wants to create reusable infrastructure components, standardize Terraform patterns, or needs help with module structure and best practices for AWS, GCP, or Azure.
Terraform Module Library
This skill provides standardized patterns and best practices for creating and using Terraform modules.
When to Use
Creating new reusable Terraform modules
Refactoring existing Terraform code into modules
Standardizing infrastructure patterns across the project
implement specific infrastructure components (VPC, GKE, RDS, etc.) using best practices
Module Structure
Standard directory structure for a Terraform module:
module-name/
├── main.tf # Primary logic and resources
├── variables.tf # Input variable definitions
├── outputs.tf # Output value definitions
├── versions.tf # Provider and Terraform version constraints
├── README.md # Module documentation
└── examples/ # Example configurations
└── complete/ # Full example usage
Best Practices
Cloud Providers
Google Cloud Platform (GCP)
Use google-beta provider for beta features if necessary, but prefer GA.
Follow Google's "Cloud Foundation Toolkit" patterns where applicable.
Resource naming: Use standardized prefixes/suffixes (e.g., gcp-vpc-{env}).
AWS
Use standard aws provider resources.
Tag all resources with consistent tags (Owner, Environment, Project).
General
Version Pinning: Always pin provider and Terraform versions in versions.tf.
Variables: Include description and type for all variables. Use validation blocks for constraints.
Outputs: Document all outputs.
State: Do not include backend configuration in modules; state is managed by the root configuration.
Common Module Patterns
Private Module Registry
If using a private registry, ensure source paths follow the registry's convention.