在使用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 上找到全部的源代码。

tplD.png

只有在使用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命令,将变量输出到控制台。(无需创建资源)

commandlindParam.png
tpl.gif
广告
将在 10 秒后关闭
bannerAds