コンテンツにスキップ

Terraform Dynamic Block で動的にリソースを設定する

Terraform の Dynamic Block は、リソース内のネストした設定ブロックを動的に生成するための構文だ。for_eachの要素ごとにブロックを生成するので、繰り返しをまとめたり、条件に応じて設定ブロックを省いたりできる。

Dynamic Block の書き方

Dynamic Block は次のように書く。

1
2
3
4
5
6
dynamic "resource_type" {
  for_each = var.var
  content {
    # リソースの設定
  }
}

各項目には次の内容を指定する。

  • resource_type: 生成するネストしたブロックの種類。後述の例ではcpu_utilization
  • for_each: ブロックを生成する要素のコレクション
  • content: 生成する各ブロックの内容

構文の詳細はTerraform 公式ドキュメントの dynamic Blocksにある。

例

variable numが 0 以上 1 以下である場合にのみcpu_utilizationを設定する。 variablenumがnullの場合はcpu_utilizationを設定しない。

variable "num" {
  type        = number
  default     = null
  nullable    = true
  validation {
    condition = (var.num == null ? true : (
      var.num >= 0 &&
      var.num <= 1
      )
    )
    error_message = "Value must be between 0 and 1."
  }
}

resource "google_compute_region_autoscaler" "sample" {
  # 省略
  dynamic "cpu_utilization" {
    for_each = var.num != null ? [true] : []
    content {
      target = var.num
    }
  }
}