【世界一わかりやすいTerraform入門⑤】繰り返し・条件分岐・dynamicでコードをもっと柔軟に!
投稿更新日: 2025/7/12

こんにちは!Terraform入門シリーズもいよいよ中盤。 今回はTerraformをもっと、「プログラミング的」に使いこなすためのテクニックを紹介します!
for_eachやcountを使ったリソースの繰り返し生成dynamicブロックでの柔軟な構造の作成ifを使った条件分岐の書き方
1. count / for_each:まとめてリソースを作成!
✅ count を使う
「同じリソースを何個も作りたい!」
そんなときは count を使えばOK。
# hcl resource "aws_s3_bucket" "example" { count = 3 bucket = "example-bucket-${count.index}" }
結果:
example-bucket-0example-bucket-1example-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 ブロック:繰り返しの中にブロック要素!
複数の ingress や egress をセキュリティグループに入れたいときなど、同じブロックを複数書きたい場面に最適。
# 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では一緒に働く仲間を募集中です。
ご興味のある方は以下の採用情報をご確認ください。
