【世界一わかりやすい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では一緒に働く仲間を募集中です。
ご興味のある方は以下の採用情報をご確認ください。
