在使用Terraform时处理变量(命令行参数、默认值、tpl文件)
介绍内容
-
- 変数の使い方
コマンドラインから引数を渡される場合
コマンドラインからtfvarsファイルを指定した場合
デフォルト値を設定する場合
tplファイルを活用する場合
tplファイルをdata “template_file”やtemplatefile関数を活用します
結論 – 一個總結或結論
-
- コマンドラインから引数を渡される場合
使用予定の変数が一つのみなら、これで十分かと思います
コマンドラインからtfvarsファイルを指定した場合
tfvarsファイルにvariable宣言やvariableのデフォルト値が一緒に設定できなくて少し残念でした
tfvarsファイルにvariable宣言ができなくてvariable宣言のために別のファイルを作る必要があります
デフォルト値を設定する場合
事前に定義したい値(ipやリソース名統一など)をデフォルト値に宣言しておくと、便利でした
tplファイルを活用する場合
AWSコンソール上で見たjsonファイルをそのままにして、必要な部分だけ変数で埋めることができて良かったと思います
例えば、AWSのIAM policyやECSのtask definitionなどに使えます
我开始介绍
目录结构
您可以在https://github.com/cheekykorkind/qiita-example/tree/master/terraform/var-examples 上找到全部的源代码。

只有在使用tpl文件时需要额外的说明。
-
- 結果画面は続く次の項目試し順番ですで確認できます
-
- 他の場合は説明なしでソースコード見たら理解が難しくないと思いまして省略します。
全体ソースコード: https://github.com/cheekykorkind/qiita-example/tree/master/terraform/var-examples
利用tpl文件的代码
output "output-s3-policy-template" {
value = templatefile("${path.root}/s3-policy-template.tpl", {
my-value = "goodddddddddddddddddddddddddd"
})
}
data "template_file" "ecs-task-definition" {
template = "${file("${path.root}/ecs-task-definition.json.tpl")}"
vars = {
my-farmily-name = "yesssssssssssssssssssssssssssssssssssss"
}
}
output "output-template-two" {
value = data.template_file.ecs-task-definition.rendered
}
output “output-s3-policy-template”部分
templatefile(…)はterraformが提供する関数です。用意したファイルのパスを第一引数、入れたい値を第二引数に入れて使用できます。第二のmy-valueの値はs3-policy-template.tplの${my-value}に代入されます。
https://www.terraform.io/docs/configuration/functions/templatefile.html
s3-policy-template.tplのコード
{
...
"Resource": [
"arn:aws:s3:::${my-value}",
"arn:aws:s3:::${my-value}/*"
]
...
}
data “template_file” “ecs-task-definition”部分
data “template_file”はterraformが提供する機能です。
template属性にtplのファイルをfile関数を使用してstringに変換して渡します。
https://www.terraform.io/docs/providers/template/d/file.html
https://www.terraform.io/docs/configuration/functions/file.html
vars属性のmy-farmily-nameの値はtplファイルで書いた変数部分(${my-farmily-name})に代入されます
ecs-task-definition.json.tplのコード
{
"family": "${my-farmily-name}",
省略
...
}
這是嘗試的順序。
使用了Terraform的output命令,将变量输出到控制台。(无需创建资源)

