Define Availability Zones Variable for Multi-AZ Deployment

Create a Terraform list(string) variable for availability zones with a minimum length validation to ensure high availability.

AWS Basics

Detailed Explanation

Availability Zones Variable

Multi-AZ deployments are essential for high availability on AWS. Defining availability zones as a variable lets you control zone selection per region while enforcing minimum redundancy.

Variable Definition

variable "availability_zones" {
  type        = list(string)
  description = "List of availability zones for resource distribution"
  default     = ["us-east-1a", "us-east-1b", "us-east-1c"]

  validation {
    condition     = length(var.availability_zones) >= 2
    error_message = "At least 2 availability zones are required for high availability."
  }
}

Multi-Region tfvars

# us-east-1.tfvars
availability_zones = ["us-east-1a", "us-east-1b", "us-east-1c"]

# eu-west-1.tfvars
availability_zones = ["eu-west-1a", "eu-west-1b", "eu-west-1c"]

Usage Pattern

The AZ list is commonly used with count or for_each to distribute resources:

resource "aws_subnet" "private" {
  count             = length(var.availability_zones)
  vpc_id            = aws_vpc.main.id
  cidr_block        = cidrsubnet(var.vpc_cidr, 8, count.index)
  availability_zone = var.availability_zones[count.index]
}

Why Validate Length?

  • Deploying to a single AZ creates a single point of failure
  • Load balancers require at least 2 AZs
  • RDS Multi-AZ requires 2+ subnets in different AZs
  • The validation catches this early, before resources fail to create

Dynamic AZ Lookup Alternative

Some teams prefer to look up AZs dynamically rather than hardcoding:

data "aws_availability_zones" "available" {
  state = "available"
}

The variable approach gives more control and predictability, especially in environments where not all AZs should be used.

Use Case

High-availability infrastructure where resources must be distributed across multiple availability zones with a minimum redundancy guarantee.

Try It — Terraform Variable Generator

Open full tool