template_fileはdeprecatedなので組み込みのtemplatefileを使う

概要

template_file は template プロバイダーを使って、レンダリングするために terraform 0.11 まで使われてきたが、0.12以降は組み込みの templatefile を使うように公式でアナウンスされています。

https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/file

In Terraform 0.12 and later, the templatefile function offers a built-in mechanism for rendering a template from a file. Use that function instead, unless you are using Terraform 0.11 or earlier.

https://registry.terraform.io/providers/hashicorp/template/latest/docs#deprecation

パッと見、プロバイダーから組み込みに変えるのは大変そうに思うかもしれませんが、実際はそんなことはなく、シンプルに置き換えが可能です。

Before

例えば下記のように、 templte_file を使って、dataを定義している場合は、dataとresourceで2つに分けて書く必要がありました。

  template = file("files/example_policy.json")
}

resource "aws_ecr_lifecycle_policy" "example" {
  repository = aws_ecr_repository.example.name
  policy     = data.template_file.example_policy.rendered

  var = {
    name = "example"
  }
}

After

templatefile になったことで、resource内に直接参照元のファイルパスを指定することができ、また変数を埋め込むことが可能です。

  repository = aws_ecr_repository.example.name
  policy = templatefile("${path.module}/files/example_policy.json", {
    name = "example"
  })
}

新しく書き換える際は、dataのときに記載していた変数をそのままコピーして、 第二引数の {} のマッピングの中に書いてあげればOKです。