Modules package reusable Terraform configurations.
Module structure:
modules/vpc/
main.tf # Resources
variables.tf # Inputs
outputs.tf # Exposed values
Using modules:
module "vpc" {
source = "./modules/vpc"
cidr = "10.0.0.0/16"
name = "production"
}
Best practices:
- Pin module versions for reproducibility
- Use workspaces or directories for environments
- Keep state files small (split by service)
- Run
terraform fmtandterraform validatein CI