Format Module Calls and Composition

Format Terraform module blocks including source references, version constraints, variable passing, and provider aliasing with proper alignment.

Advanced Patterns

Detailed Explanation

Formatting Module Blocks

Module blocks define the inputs to child modules. Well-formatted module calls make the data flow between modules clear and easy to trace.

Module Call Examples

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.1.2"

  name = "${local.resource_prefix}-vpc"
  cidr = var.vpc_cidr

  azs             = var.availability_zones
  private_subnets = var.private_subnet_cidrs
  public_subnets  = var.public_subnet_cidrs

  enable_nat_gateway   = true
  single_nat_gateway   = var.environment != "production"
  enable_dns_hostnames = true

  tags = local.common_tags
}

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "19.16.0"

  cluster_name    = "${local.resource_prefix}-eks"
  cluster_version = var.kubernetes_version

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  cluster_endpoint_public_access = var.environment == "development"

  eks_managed_node_groups = {
    default = {
      min_size       = var.node_min_size
      max_size       = var.node_max_size
      desired_size   = var.node_desired_size
      instance_types = var.node_instance_types
    }
  }

  tags = local.common_tags
}

Local Module Reference

module "lambda_functions" {
  source   = "./modules/lambda"
  for_each = var.lambda_configs

  function_name = each.key
  handler       = each.value.handler
  runtime       = each.value.runtime
  timeout       = each.value.timeout
  memory_size   = each.value.memory_size

  environment_variables = merge(
    local.common_env_vars,
    each.value.env_vars
  )

  tags = local.common_tags
}

Formatting Conventions

  • Source and version first: source and version are always the first two attributes
  • Grouped inputs: Related inputs are grouped with blank lines between groups
  • Aligned equals: All inputs within a group have aligned = signs
  • Module references: module.vpc.vpc_id references are kept inline
  • for_each modules: When using for_each, it comes right after source/version
  • Tags last: The tags attribute is conventionally the last attribute

Use Case

Composing infrastructure from reusable modules, passing outputs between modules, and maintaining clean data flow in multi-module Terraform configurations.

Try It — Terraform HCL Formatter

Open full tool