翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform 変数、ローカル値、出力について
変数は、コードブロック内のプレースホルダーを許可することで、コードの柔軟性を高めます。変数は、コードが再利用されるたびに異なる値を表すことができます。Terraform は、モジュラースコープによって変数タイプを区別します。入力変数はモジュールに挿入できる外部値であり、出力値は外部で共有できる内部値であり、ローカル値は常に元の範囲内にとどまります。
変数
AWS CloudFormation はパラメータを使用して、あるスタックのデプロイから次のスタックへの設定とリセットが可能なカスタム値を表します。同様に、Terraform は入力変数
variable "thing_i_made_up" { type = string } variable "random_number" { default = 5 } variable "dogs" { type = list(object({ name = string breed = string })) default = [ { name = "Sparky", breed = "poodle" } ] }
設定内で Sparky の 品種にアクセスするには、変数 を使用しますvar.dogs[0].breed
。変数にデフォルトがなく、nullable として分類されていない場合は、変数の値をデプロイごとに設定する必要があります。それ以外の場合は、変数に新しい値を設定することはオプションです。ルートモジュールでは、コマンドライン 、環境変数
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
この例dogs
の terraform.tfvars ファイルの の値は、変数宣言のデフォルト値を上書きします。子モジュール内で変数を宣言する場合は、次の例に示すように、モジュール宣言ブロック内で変数値を直接設定できます。
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
変数を宣言するときに使用できる他の引数には、次のようなものがあります。
-
sensitive
– これを に設定すると、変数値が Terraform プロセス出力で公開されtrue
なくなります。 -
nullable
– これを に設定するとtrue
、変数に値を指定できなくなります。これは、デフォルトが設定されていない変数に便利です。 -
description
– スタックのメタデータに変数の説明を追加します。 -
validation
– 変数の検証ルールを設定します。
Terraform 変数の最も便利な側面の 1 つは、変数宣言内に 1 つ以上の検証オブジェクトを追加する機能です。検証オブジェクトを使用して、変数が渡す必要がある条件を追加したり、そうしないとデプロイが失敗したりすることができます。条件に違反するたびに表示するカスタムエラーメッセージを設定することもできます。
例えば、チームのメンバーが実行する Terraform 設定ファイルを設定します。スタックをデプロイする前に、チームメンバーは terraform.tfvars ファイルを作成して、重要な設定値を設定する必要があります。これらを思い出すには、次のような操作を行います。
variable "important_config_setting" { type = string validation { condition = length(var.important_config_setting) > 0 error_message = "Don't forget to create the terraform.tfvars file!" } validation { condition = substr(var.important_config_setting, 0, 7) == "prefix-" error_message = "Remember that the value always needs to start with 'prefix-'" } }
この例に示すように、1 つの変数内に複数の条件を設定できます。Terraform は、失敗した条件のエラーメッセージのみを表示します。これにより、変数値にあらゆる種類のルールを適用できます。変数値が原因でパイプラインに障害が発生した場合は、その理由が正確にわかります。
ローカル値
モジュール内にエイリアスを設定する値がある場合は、更新されないデフォルトの変数を宣言するのではなく、 locals
キーワードを使用します。名前が示すように、locals
ブロックには、その特定のモジュールに内部的にスコープされた用語が含まれています。リソース名で使用する変数値にプレフィックスを追加するなど、文字列値を変換する場合は、ローカル値を使用することをお勧めします。次の例に示すように、1 つのlocals
ブロックでモジュールのすべてのローカル値を宣言できます。
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
値にアクセスすると、locals
キーワードが のように単数になることに注意してくださいlocal.LocalConfigId
。
出力値
Terraform 入力変数が CloudFormation パラメータに似ている場合、Terraform 出力値はoutput
ブロックを 2 番目のモジュールに追加する必要があります。
output "module_id" { value = local.module_id } Then in the first module you could use it like this: module "first_module" { source = "path/to/first/module" } resource "example_resource" "example_resource_name" { module_id = module.first_module.module_id }
Terraform 出力値は同じスタック内で使用できるため、 output
ブロックの sensitive
属性を使用して、スタック出力に値が表示されないようにすることもできます。さらに、 output
ブロックは、変数が precondition
ブロックを使用するのと同じ方法で validation
ブロックを使用できます。これにより、変数が特定のルールのセットに従うようになります。これにより、デプロイを続行する前に、モジュール内のすべての値が期待どおりに存在していることを確認できます。
output "important_config_setting" { value = var.important_config_setting precondition { condition = length(var.important_config_setting) > 0 error_message = "You forgot to create the terraform.tfvars file again." } }