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:
sourceandversionare 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_idreferences are kept inline - for_each modules: When using
for_each, it comes right aftersource/version - Tags last: The
tagsattribute 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.