広告

Terraform-local values

GCP

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は繰り返し使用する値をまとめるために使用します。
ただ、むやみにどこでも使ってしまうと、逆に設定ファイルが読みづらくなってしまう可能性もありますので、よく考えて使っていきましょう。

ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました