マルチ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リストはcountfor_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つ以上のサブネットが必要
  • バリデーションによりリソース作成が失敗する前にこれを早期検出

ユースケース

最小限の冗長性保証を持つ複数のアベイラビリティゾーンにリソースを分散する必要がある高可用性インフラストラクチャ。

試してみる — Terraform Variable Generator

フルツールを開く