11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Terraform】色々な条件分岐方法メモ

Posted at

概要

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を代入

参考

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?