Curriculum Modulesmodule-08Reusable Module Architecture

Reusable Module Architecture

What are Modules?

A Terraform module is a set of Terraform configuration files in a single directory. Modules are the primary way to package and reuse resource configurations with Terraform. Even a simple setup with a single directory containing .tf files is technically a module (the “root module”).

Creating and Using Modules

You can encapsulate complex, standard infrastructure components into modules, abstracting away the low-level details.

Module Structure

A typical module structure includes:

  • main.tf: The primary resources.
  • variables.tf: Input parameters.
  • outputs.tf: Return values.

Calling a Module

To use a module, you define a module block in your root configuration and pass the required variables.

module "vpc" {
  source = "./modules/vpc"
 
  vpc_cidr             = "10.0.0.0/16"
  public_subnets_cidr  = ["10.0.1.0/24", "10.0.2.0/24"]
  private_subnets_cidr = ["10.0.3.0/24", "10.0.4.0/24"]
}

Module Sources

Modules can be loaded from various sources:

  • Local paths (./modules/vpc)
  • Terraform Registry
  • GitHub repositories (git::https://github.com/example/terraform-aws-vpc.git?ref=v1.0.0)
  • HTTP URLs

Best Practices

  • Single Responsibility: A module should do one thing well (e.g., create a VPC, not a VPC + Database + Web Servers).
  • Versioning: Always pin module versions, especially when using external registries or Git repositories.
  • Documentation: Document required and optional variables for your modules.