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.