見出し画像

terraform 0.12でのtfvarsの扱い

まずはディレクトリ構成

sample/
├── develop
│   └── backend.tfvars
├── production
│   ├── backend.tfvars
│   └── terraform.tfvars
├── stage
│   ├── backend.tfvars
│   └── terraform.tfvars
├── main.tf
└── variable.tf

おおよそ上記構成で、

cd sample/develop
terraform init -backend-config ..
terraform plan ..
terraform apply ..

という流れで実施してきました。0.11のときでは、variable.tf をterraform.tfvars でマージしていい感じに動いていたのですが、0.12からはこの挙動が上書きに変わりました。

どういうことかというと、

variable "test" {
  default = {
    a = 1
    b = 2
  }
}

として tfvarsで

test = {
  a = 2
}

としたとき、testの値は test = {a=2} だけとなってしまい。test[b] は nil になってしまいます。


そこで、昔と同じように挙動にさせたい場合は、以下のようにすればマージの挙動にすることができます。

variable.tf

variable "test_default" {
  type = map(string)
  default = {
    a = "hello"
    b = "world"
  }
}

variable "test" {
  type = map(string)
  default = {}
}

locals {
 # defaultを先に指定する
 test = merge(var.test_default,var.test)
}
​

terraform.tfvars

test = {
 a = "goodbye"
}

とするとlocalには以下のような値が入るので

locals {
  test = {
    a = "goodbye"
    b = "world"
  }
}

var.test だった箇所を locals.test に置換してあげれば、OKです。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

6

vshimoda

インフラエンジニアです。Kubernetes周辺のこととか、Terraformとかを雑多に載せていきます。

スリーシェイク note

エンジニアリングの話、組織の話、シンプルでイノベーティブな「インフラの世界」の話。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。