【世界一わかりやすいTerraform入門⑤】繰り返し・条件分岐・dynamicでコードをもっと柔軟に!

投稿更新日: 2025/7/12

サムネイル

こんにちは!Terraform入門シリーズもいよいよ中盤。 今回はTerraformをもっと、「プログラミング的」に使いこなすためのテクニックを紹介します!

  • for_eachcount を使ったリソースの繰り返し生成
  • dynamic ブロックでの柔軟な構造の作成
  • if を使った条件分岐の書き方

スクリーンショット

1. count / for_each:まとめてリソースを作成!

count を使う 「同じリソースを何個も作りたい!」 そんなときは count を使えばOK。

# hcl
resource "aws_s3_bucket" "example" {
  count  = 3
  bucket = "example-bucket-${count.index}"
}

結果:

  • example-bucket-0
  • example-bucket-1
  • example-bucket-2 が一気に作成されます!

for_each を使う

# hcl
variable "buckets" {
  default = {
    "dev"  = "dev-bucket"
    "stg"  = "stg-bucket"
    "prod" = "prod-bucket"
  }
}

resource "aws_s3_bucket" "example" {
  for_each = var.buckets
  bucket   = each.value
}

それぞれの環境名をキーにした、柔軟なリソース管理ができます!


2. dynamic ブロック:繰り返しの中にブロック要素!

複数の ingressegress をセキュリティグループに入れたいときなど、同じブロックを複数書きたい場面に最適。

# hcl
variable "cidr_blocks" {
  default = ["10.0.0.0/24", "10.0.1.0/24"]
}

resource "aws_security_group" "example" {
  name = "example-sg"

  dynamic "ingress" {
    for_each = var.cidr_blocks
    content {
      from_port   = 80
      to_port     = 80
      protocol    = "tcp"
      cidr_blocks = [ingress.value]
    }
  }
}

これで、何個あっても cidr_blocks に応じて自動で ingress が作成されます!


3. 条件分岐(if)で柔軟に制御

✅ リソースの作成を制御(count + 三項演算子

# hcl
variable "create_s3" {
  default = true
}

resource "aws_s3_bucket" "optional" {
  count  = var.create_s3 ? 1 : 0
  bucket = "conditional-bucket"
}

フラグで「作る/作らない」を切り替え可能に!


✅ 出力の出し分け(output GitHub Actionsの例:

# hcl
output "env_message" {
  value = var.env == "prod" ? "本番環境です" : "開発環境です"
}

環境に応じたメッセージを表示できます!


まとめ:Terraformは“書ける”だけじゃない!

今回学んだ for_each, count, dynamic, if を使うことで、Terraformのコードはこう変わります:

  • コードが短くなる
  • 再利用しやすくて保守性が上がる
  • 条件に応じた柔軟な制御ができる

Terraformをもっと自由に、もっと楽しく使えるようになりますね!


この記事をシェアする

合同会社raisexでは一緒に働く仲間を募集中です。

ご興味のある方は以下の採用情報をご確認ください。