terraform-module-library
SKILL.md
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-betaprovider 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
awsprovider resources. - Tag all resources with consistent tags (Owner, Environment, Project).
General
- Version Pinning: Always pin provider and Terraform versions in
versions.tf. - Variables: Include
descriptionandtypefor all variables. Usevalidationblocks 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.
Local Modules
For local development or monorepos:
module "network" {
source = "./modules/network"
# ...
}
Review Checklist
- Does the module have a
README.mdwith input/output documentation? - Are all variables typed and described?
- Are resource names deterministic or correctly scoped?
- Does it include
examples/? - Is
terraform_remote_stateavoided within the module?