Terraformのnull_resourceで、変数の初期化子内の変数展開を代用

Terraformでは、変数の値を決める部分(default句)で変数を展開することはできない。つまり、変数の値を、他の変数を使った計算によって決めることはできない。

計算された値を複数の箇所で使うためには、null_resourceのtriggers属性を値のマッピングとして使うことで、変数の代用とすることができる。cf. issue #4084 / Github hashicorp/terraform

variable "msg" { type = "string" }

resource "null_resource" "computed" {
  triggers {
    startup_script = <<EOS
      echo Hello!
      echo '${msg}'
EOS
  }
}

resource "google_compute_instance" "web"  {
  metadata_startup_script = "${null_resource.computed.triggers.startup_script}"
  ...
}

resource "google_compute_instance" "app"  {
  metadata_startup_script = "${null_resource.computed.triggers.startup_script}"
  ...
}

とはいえ、あまり調子に乗って複雑なことをしない方が良い気はする。