マルチAZデプロイメント用のアベイラビリティゾーン変数を定義する
高可用性を確保するための最小長バリデーション付きアベイラビリティゾーンのTerraform list(string)変数を作成します。
AWS Basics
詳細な説明
アベイラビリティゾーン変数
マルチAZデプロイメントはAWSでの高可用性に不可欠です。アベイラビリティゾーンを変数として定義することで、最小限の冗長性を確保しながらリージョンごとのゾーン選択を制御できます。
変数定義
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."
}
}
マルチリージョン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"]
使用パターン
AZリストはcountやfor_eachと共にリソースを分散するために一般的に使用されます:
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]
}
なぜ長さをバリデーションするのか?
- 単一AZへのデプロイは単一障害点を作る
- ロードバランサーは少なくとも2つのAZが必要
- RDS Multi-AZは異なるAZに2つ以上のサブネットが必要
- バリデーションによりリソース作成が失敗する前にこれを早期検出
ユースケース
最小限の冗長性保証を持つ複数のアベイラビリティゾーンにリソースを分散する必要がある高可用性インフラストラクチャ。