countとfor_eachリソースのフォーマット

countとfor_eachメタ引数を使用するTerraformリソースを、動的参照、条件式、マップルックアップの適切な揃えでフォーマットします。

Resources

詳細な説明

countとfor_eachのフォーマット

countfor_eachメタ引数はリソースの複数インスタンスの作成を可能にします。動的参照(count.indexeach.keyeach.value)がブロック全体に現れるため、適切なフォーマットが重要です。

countの例

resource "aws_subnet" "private" {
  count = length(var.private_subnet_cidrs)

  vpc_id            = aws_vpc.main.id
  cidr_block        = var.private_subnet_cidrs[count.index]
  availability_zone = var.availability_zones[count.index]

  tags = {
    Name = "private-subnet-${count.index}"
    Type = "private"
    AZ   = var.availability_zones[count.index]
  }
}

マップ付きfor_eachの例

resource "aws_iam_user" "team" {
  for_each = toset(var.team_members)

  name          = each.value
  path          = "/team/"
  force_destroy = true

  tags = {
    Team      = "engineering"
    ManagedBy = "terraform"
  }
}

フォーマット規則

  • メタ引数が先頭: countまたはfor_eachは常にブロックの最初の属性で、他の属性とは空行で区切り
  • 一貫した参照: count.indexeach.keyeach.value参照はそれらが設定する属性と同じ行に保持
  • インラインマップ: for_eachがインラインマップを使用する場合、キーはマップブロック内で揃えられる
  • タグの揃え: 静的と動的な値が混在するタグでも等号は揃えられる

ユースケース

サブネット、IAMユーザー、S3バケットなど、リストやマップから複数の類似リソースを作成する場合、一貫したフォーマットで動的リソース生成パターンを明確化。

試してみる — Terraform HCL Formatter

フルツールを開く