概要
Terraformにはif文がない。
しかし、環境ごとに値を変えたいなど条件分岐的な記述をしたい時がある。
Terraformでは、三項演算子と特定のプロパティを組み合わせることによって、条件分岐的な記述が可能になる。
count + 三項演算子
countの数だけリソースが作成され、0ならリソースを作成しない。
開発環境によってcountの値を変化させ、リソース作成の有無を分岐させるなどといった使い方ができる。
(例)
resource "aws_s3_bucket" "b" {
count = var.env == "prod" ? 0 : 1
bucket = "s3-website-test.hashicorp.com"
acl = "public-read"
policy = file("policy.json")
}
dynamic + for_each
一部リソースではcountが使えないこともある。
そこでdynamic
ブロックとfor_each
を使ってリソースの作成数を分岐させる方法もある。
variable list = []
resource "example" "hoge" {
dynamic attribute {
for_each = var.list
content {
attribute1 = "hoge"
...
}
}
}
三項演算子と組み合わせる場合
resource "example" "hoge" {
dynamic attribute {
for_each = var.fuga ? [] : [1]
content {
attribute1 = "hoge"
...
}
}
}
for_eachが空配列なら、countが0の時のようにリソースが作成されない。
contains + 三項演算子
配列list
の中にvalue
が含まれているかで分岐
attribute = cointains(list, value) : valiue ? null
map内に特定のkeyがあるかどうかで判定
以下のような変数があるとする
variable item {
hoge = "fuga"
}
attribute = contains(keys(item.value), "hoge") ? item.value["hoge"] : null
変数itemの中にhogeというkeyが存在するかどうかで判定
→ 存在しなければnullを代入
参考