local valuesはモジュールのローカル変数(局部变量)みたいなものです。※モジュール内のみ使用可能
同じ値が何度も使う場合、local valuesを定義することで、まとめられます。
モジュールを関数と比較してみると、input variables、output values、local values以下のような役割と相当します。
- input variables:引数(args)
- output values:return値
- local values:ローカル変数(function's local temporary symbols)
local valuesの定義と使用
local valuesの定義は、locals
ブロックで定義します。
書き方:
locals {
value1 = "hello"
value2 = "world"
}
また、local valuesは複雑な表現やlocal values間の呼び出しも可能です。
例:
locals {
foo = [1,2,3,4]
bar = ["a","b","c","d"]
}
locals {
# listを結合して、新たなlistを生成する
concat_words = concat(local.foo, local.bar)
}
# 出力
output "local_values" {
value = local.concat_words
}
※注意:定義時はlocals
で定義しますが、呼び出し時はlocal.<value名>
で呼び出します。(呼び出し時にs
がない)
使用例
GCPのGCEを作成する際に、メタデータを設定するような例です。
# local valuesを定義
locals {
service_name = "foo"
owner = "bar"
}
# 他のlocal valuesを呼び出して、定義する
locals {
test_metadata = {
service = local.service_name
owner = local.owner
}
}
provider "google" {
project = "test-project"
region = "asia-northeast1"
zone = "asia-northeast1-a"
}
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance-test"
machine_type = "f1-micro"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = "default"
access_config {
}
}
# リソース作成の項目に、local values を使用
metadata = local.test_metadata
}
# 出力する
output "test_output" {
value = google_compute_instance.vm_instance.metadata
# sensitive = true
description = "this is a root module, so it output the value"
depends_on = []
}
最後に
local valuesは繰り返し使用する値をまとめるために使用します。
ただ、むやみにどこでも使ってしまうと、逆に設定ファイルが読みづらくなってしまう可能性もありますので、よく考えて使っていきましょう。
ここまで読んでいただいて、お疲れ様でした。
コメント