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は最終手段として使ってください。
コメント