広告

Terraform-output values

GCP

output valuesとは

output values(出力値)はTerraformのruturn値みたいなものです。

以下の用途があります。

  • 子モジュールは、output valuesを使って、親モジュールへ情報連携できます
  • rootモジュール(一番上の親モジュール)は、output valuesを使って、情報出力できます
  • *remote stateを使う場合、rootモジュールのoutput valuesは他のモジュールのデータソースとして使えます

output valuesの定義

output valuesの定義は、outputブロックで定義します。

書き方:

output "<変数名>" {
  # ...
}

rootモジュールでは、<変数名>は出力されます。
子モジュールでは、<変数名>は変数の値をアクセスするために使われます。

output valuesの使用

rootモジュール

provider "google" {
    project = "test-project"
    region = "asia-northeast1"
    zone = "asia-northeast1-a"
}

resource "google_compute_instance" "vm_instance" {
    name = "terraform-instance"
    machine_type = "f1-micro"

    boot_disk {
        initialize_params {
            image = "debian-cloud/debian-9"
        }
    }

    network_interface {
        network = "default"
        access_config {
        }
    }
}

# output valuesの使用
# "test_output"はoutput values名
output "test_output" {
  # valuesはVMのIPを指定しています
  value       = google_compute_instance.vm_instance.network_interface[0].network_ip
  # sensitive   = true  # (オプション)。sensitive(敏感的な)をtrueにする場合、valueは出力されない
  description = "this is a root module, so it output the values"  # (オプション)
  depends_on  = []  # (オプション)。基本不要
}

この設定ファイルをterraform apply で実行すると、最後にoutputとして以下の内容が出力されます。

Outputs:

test_output = xxx.xxx.xxx.xxx

※terraform planは、出力を行いません。

子モジュール

親モジュールで、子モジュールのoutput valuesをmoduleキーワードで、以下のように呼び出せます。
module.<子モジュール名>.<output values名>

output valuesのオプション

上記の例では、output valuesの定義で、value、sensitive、description、depends_onが定義されています。

簡単に以下で説明します。

  • value(必須):outputの値の定義
  • sensitive(オプション):敏感な情報かどうかの定義
    • ture:敏感情報、terraform applyの結果に、変数名のみ出力されます。値は出力されません。
      • 注意:stateファイルで情報を確認できます
  • description(オプション):output valuesの説明
  • depends_on(オプション):outputが他のモジュールやリソースに依存関係がある場合記述する内容です。
    • 多くの場合、Terraformは自動分析して、依存関係を識別してくれます。なので、基本depends_onは必要ない。たまに、識別できない場合使用します。

The depends_on argument should be used only as a last resort. When using it, always include a comment explaining why it is being used, to help future maintainers understand the purpose of the additional dependency.

上記の引用通り、depands_onは最終手段として使ってください。

コメント

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