■ はじめに
テンプレートをちょうど勉強してた際に、以下のサイト
https://tech.revcomm.co.jp/terraform-troubleshooting
って記事に「既存のコードが非推奨になっている」ってあって その中で「 Template provider は、すでに非推奨」っとあったので そのことも含めて、まとめてみる => 結局、templatefile 関数を使いましょって話。
目次
【0】data "template_file"(非推奨) 1)非推奨について 2)サンプル 【1】templatefile 関数 1)構文 【2】サンプル 例1:List 例2:Map 例3:JSON / YAML
【0】data "template_file"(非推奨)
* テンプレートファイル を取り入れる => ネットで調べると、これが多くみられる
https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/file
1)非推奨について
https://registry.terraform.io/providers/hashicorp/template/latest/docs
より抜粋 ~~~~~~~~~~~~ Template Provider This provider is deprecated. このプロバイダは、非推奨です。 ~~~~~~~~~~~~
https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/file
より抜粋 ~~~~~~~~~~~~ Note In Terraform 0.12 and later, the templatefile function offers a built-in mechanism for rendering a template from a file. Terraform v0.12以降において、templatefile は、 ファイルからテンプレートをレンダリングするために、 ビルトインをオファーしている Use that function instead, unless you are using Terraform 0.11 or earlier. Terraform 0.11以前を使っていない限り、この関数を代わりに使ってください。 ~~~~~~~~~~~~
2)サンプル
https://febc-yamamoto.hatenablog.jp/entry/2018/02/05/193735
demo_shell.template
#!/bin/bash echo "Hello, ${name_for_hello}!!!"
main.tf
data "template_file" "demo_template_file" { # Template template = "${file("demo_shell.template")}" # Set value to a template file vars = { name_for_hello = "Mike" } } output "result" { value = "${data.template_file.demo_template_file.rendered}" }
コマンド例
terraform init terraform apply ... Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: result = <<EOT #!/bin/bash echo "Hello, Mike!!!" EOT
【1】templatefile 関数
* テンプレートファイル を取り入れる => for文で繰り返すことも可能
https://developer.hashicorp.com/terraform/language/functions/templatefile
1)構文
# path = テンプレートのパス # vars = 引数 # 戻り値:テンプレートから出力された内容 templatefile(path, vars)
【2】サンプル
* 公式サイトのサンプルちょい間違ってる、、、
例1:Lists
backends.tftpl
%{ for addr in ip_addrs ~} backend ${addr}:${port} %{ endfor ~}
main.tf
output "result" { value = templatefile( "${path.module}/backends.tftpl", { port = 8080, ip_addrs = ["10.0.0.1", "10.0.0.2"] } ) }
出力結果
Outputs: result = <<EOT backend 10.0.0.1:8080 backend 10.0.0.2:8080 EOT
例2:Map
backends.tftpl
%{ for config_key, config_value in config } set ${config_key} = ${config_value} %{ endfor ~}
main.tf
output "result" { value = templatefile( "${path.module}/backends.tftpl", { config = { "key1" = "Hello" "key2" = "World" "key3" = "!!!!" } } ) }
出力結果
Outputs: result = <<EOT set key1 = Hello set key2 = World set key3 = !!!! EOT
例3:JSON / YAML
backends.tftpl
${jsonencode({ "backends": [for addr in ip_addrs : "${addr}:${port}"], })} ======== ${yamlencode({ "backends": [for addr in ip_addrs : "${addr}:${port}"], })}
main.tf
output "result" { value = templatefile( "${path.module}/backends.tftpl", { port = 8080, ip_addrs = ["10.0.0.1", "10.0.0.2"] }) }
出力結果
Outputs: result = <<EOT {"backends":["10.0.0.1:8080","10.0.0.2:8080"]} ======== "backends": - "10.0.0.1:8080" - "10.0.0.2:8080" EOT
関連記事
Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ 基本編 / Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
Terraform ~ Terraformあれこれ ~
https://dk521123.hatenablog.com/entry/2023/05/15/205352
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS MSK ~
https://dk521123.hatenablog.com/entry/2023/05/14/122215
Terraform ~ 機密情報の扱いを考える ~
https://dk521123.hatenablog.com/entry/2023/05/18/005103
Amazon S3 ~ AWS CLIで操作 ~
https://dk521123.hatenablog.com/entry/2017/04/01/235355