Apa itu output
Output mirip dengan nilai kembali (return value) dalam bahasa pemrograman. Output memungkinkan Anda mengekspos atribut infrastruktur setelah menjalankan terraform apply, sehingga Anda dapat memeriksanya, meneruskannya antar modul, atau menggunakannya sebagai masukan untuk alat lain.
Kasus penggunaan umum:
Tampilkan atribut resource — tampilkan nilai yang dihitung (seperti ID Instance ECS atau alamat IP) di CLI setelah
terraform applyTeruskan data antar resource — ekstrak atribut dari satu resource dan rujuk di resource lain, misalnya menggunakan alamat IP VPC dalam aturan security group
Bagikan data antar modul — ekspos nilai dari modul anak agar modul induk dapat merujuknya
Integrasikan dengan alat eksternal — salurkan nilai output ke skrip atau pipeline CI/CD menggunakan
terraform output
Sintaksis output
Deklarasikan output dalam blok output. Anda dapat meletakkan blok output di mana saja dalam file konfigurasi Terraform Anda. Namun, kami menyarankan meletakkannya dalam file terpisah bernama outputs.tf agar konfigurasi lebih mudah dinavigasi.
Label setelah kata kunci output adalah nama output. Nama output harus unik dalam modul tersebut. Blok output menerima argumen berikut:
-
value
(Wajib) Nilai yang dikembalikan kepada pengguna modul.
-
description
(Opsional) Deskripsi yang dapat dibaca manusia mengenai tujuan output tersebut. Terraform menggunakan deskripsi ini untuk menghasilkan dokumentasi tentang modul.
-
sensitive
(Opsional) Nilai Boolean yang menunjukkan apakah output bersifat sensitif. Jika
true, Terraform menyensor nilai tersebut dari output CLI untuk mencegah kebocoran data rahasia, seperti password atau Secret AccessKey.
Contoh berikut mendeklarasikan output bernama vpc_id untuk resource bernama my-vpc:
# Create a VPC
resource "alicloud_vpc" "my-vpc" {
vpc_name = "tf-vpc"
cidr_block = "10.0.0.0/16"
}
output "vpc_id" {
value = alicloud_vpc.my-vpc.id
}
Setelah terraform apply berhasil, ID VPC akan muncul dalam output CLI:
alicloud_vpc.my-vpc: Creating...
alicloud_vpc.my-vpc: Creation complete after 7s [id=vpc-bp1gcq59rsakmwx1apmhn]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
vpc_id = "vpc-bp1gcq59rsakmwx1apmhn"
Kueri output dengan perintah terraform output
Untuk resource yang sudah dibuat, jalankan terraform output kapan saja untuk melihat semua nilai output:
$ terraform output
vpc_id = "vpc-bp1gcq59rsakmwx1apmhn"
Untuk mengambil satu nilai sebagai string mentah (cocok untuk skrip shell):
$ terraform output -raw vpc_id
vpc-bp1gcq59rsakmwx1apmhn
Untuk mengambil semua output dalam format JSON (cocok untuk pemrosesan terprogram):
$ terraform output -json
{
"vpc_id": {
"sensitive": false,
"type": "string",
"value": "vpc-bp1gcq59rsakmwx1apmhn"
}
}
Flag -raw dan -json menampilkan nilai teks biasa dari output sensitif. Jangan gunakan flag ini dalam konteks di mana output dicatat atau disimpan.
Akses output dari modul anak
Modul induk mengakses output modul anak menggunakan module.<MODULE_NAME>.<OUTPUT_NAME>:
module "network" {
source = "./modules/network"
}
resource "alicloud_security_group_rule" "allow_vpc" {
cidr_ip = module.network.vpc_cidr_block
}
Modul anak (./modules/network) harus mendeklarasikan output tersebut:
output "vpc_cidr_block" {
description = "CIDR block of the VPC"
value = alicloud_vpc.main.cidr_block
}
Praktik terbaik untuk output
-
Hanya output informasi yang berguna
Ekspos atribut yang dihitung, bukan nilai statis yang hanya mengulang variabel. Untuk resource jaringan, output yang berguna mencakup:
id: identifier dari resource tersebut.router_id: identifier dari router yang secara otomatis dibuat untuk VPC.route_table_id: identifier dari tabel rute yang secara otomatis dibuat untuk VPC.
Gunakan nama dan deskripsi yang bermakna — ikuti konvensi yang sama seperti nama variabel dan sertakan argumen
descriptionuntuk mendokumentasikan maksud output tersebut.Letakkan semua output dalam
outputs.tf— file khusus ini mempermudah peninjauan terhadap apa saja yang diekspos oleh konfigurasi Anda.-
Tandai output sensitif
Gunakan fitur bawaan Terraform
sensitive = truedaripada mengenkripsi nilai secara manual. Saat output ditandai sebagai sensitif, Terraform menyensor nilainya dari outputterraform plandanterraform apply.