countとfor_eachリソースのフォーマット
countとfor_eachメタ引数を使用するTerraformリソースを、動的参照、条件式、マップルックアップの適切な揃えでフォーマットします。
Resources
詳細な説明
countとfor_eachのフォーマット
countとfor_eachメタ引数はリソースの複数インスタンスの作成を可能にします。動的参照(count.index、each.key、each.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.index、each.key、each.value参照はそれらが設定する属性と同じ行に保持 - インラインマップ:
for_eachがインラインマップを使用する場合、キーはマップブロック内で揃えられる - タグの揃え: 静的と動的な値が混在するタグでも等号は揃えられる
ユースケース
サブネット、IAMユーザー、S3バケットなど、リストやマップから複数の類似リソースを作成する場合、一貫したフォーマットで動的リソース生成パターンを明確化。