Ikhtisar
Contoh sebelumnya menggunakan nilai hard-coded untuk argumen sumber daya. Untuk memparameterisasi konfigurasi, menstandarkan kode, atau menyesuaikan argumen sumber daya saat apply, gunakan variabel. Variabel memungkinkan Anda mendefinisikan nilai sekali dan menggunakannya kembali di berbagai sumber daya.
Penggunaan variabel memberikan:
Versatilitas yang Lebih Tinggi
Pisahkan data konfigurasi dari kode sumber sehingga Anda dapat menggunakan konfigurasi Terraform yang sama di berbagai lingkungan tanpa perlu mengedit kode.
Fleksibilitas yang Lebih Baik
Setelah mendeklarasikan variabel, Anda dapat menetapkan nilainya pada saat apply melalui variabel lingkungan, opsi CLI, atau file definisi variabel (
.tfvars). Pada contoh berikut, nama VPC, deskripsi, dan Blok CIDR di-hardcode. Anda dapat mendeklarasikan salah satu dari elemen tersebut sebagai variabel dan menetapkannya pada saat apply.
resource "alicloud_vpc" "my_vpc" {
vpc_name = "main-vpc"
cidr_block = "10.0.0.0/16"
description = "jaringan vpc pertama saya"
}Sintaks Variabel Input
Bagian ini menjelaskan cara mendeklarasikan variabel input.
Variabel dideklarasikan dalam blok variable. Anda dapat menempatkannya di file .tf mana pun, namun biasanya disimpan di variables.tf.
Label setelah variable merupakan nama variabel. Saat menetapkan nama variabel, ikuti aturan berikut ini:
Kesatuan dalam Modul:
Setiap nama variabel harus unik dalam modul saat ini. Variabel yang dideklarasikan di modul anak tidak bertentangan dengan variabel di modul induk karena setiap modul memiliki namespace-nya sendiri.
Hindari penggunaan nama yang mirip dengan kata kunci:
Meskipun Terraform tidak mencadangkan kata kunci untuk nama variabel, menggunakan nama yang bertumpang tindih dengan istilah umum Terraform dapat menimbulkan kebingungan. Hindari nama seperti
count,for_each,depends_on,null, atau nama fungsi sepertilengthdansubstr.
Blok variable tidak memiliki argumen wajib. Jika Anda menghilangkan type, variabel akan menerima semua jenis (any). Jika Anda menghilangkan default, variabel menjadi wajib dan harus diberikan saat plan/apply.
type
Argumen type membatasi jenis nilai yang dapat diterima oleh variabel. Terraform mendukung tipe primitif seperti bool, number, dan string, serta tipe yang lebih kompleks seperti list(type), set(type), map(type), object({}), tuple([...]), dan any.
bool: Nilai biner seperti
trueataufalse(tanpa tanda kutip).number: Nilai numerik.
string: Nilai teks.
default
default merupakan argumen dalam blok variable yang menetapkan nilai default.
Untuk mengakses nilai variabel yang dideklarasikan dalam modul, gunakan ekspresi var.<name>. Pada contoh berikut, variabel vpc_cidr_block dirujuk sebagai var.vpc_cidr_block di blok sumber daya dan ditetapkan ke argumen cidr_block. Jika tidak ada nilai yang diberikan, Terraform akan menggunakan nilai default variabel.
resource "alicloud_vpc" "my_vpc" {
vpc_name = "main-vpc"
cidr_block = var.vpc_cidr_block
description = ""
}
variable "vpc_cidr_block" {
default = "10.0.0.0/16"
}Nama variabel dalam blok variable harus sesuai dengan nama yang digunakan dalam referensi sumber daya. Nilai default dapat ditimpa melalui variabel lingkungan, file definisi variabel (contohnya, terraform.tfvars), atau opsi CLI seperti -var. Contohnya:
# Timpa nilai default menggunakan opsi CLI -var
$ terraform plan -var vpc_cidr_block="172.16.0.0/16"deskripsi
description mendokumentasikan tujuan serta nilai yang diharapkan dari sebuah variabel. Jika variabel tidak memiliki default, Terraform akan meminta nilai dan menampilkan description selama proses plan atau apply.

Tulis description dari sudut pandang pengguna (apa yang perlu disediakan dan alasannya), bukan dari sudut pandang pemelihara. Gunakan komentar untuk catatan internal, bukan di dalam description.
sensitive
sensitive merupakan argumen Boolean yang menandai nilai variabel sebagai sensitif dalam output CLI. Ketika sensitive = true, Terraform akan menyembunyikan nilai tersebut dalam output terraform plan dan terraform apply.
Ini membantu untuk menyimpan nilai seperti kredensial database, kunci akses, atau kata sandi. (Namun, sensitive tidak mengenkripsi file state; nilai sensitif mungkin tetap disimpan di state. Gunakan manajemen rahasia dan praktik terbaik untuk perlindungan state.)
Contoh: Menandai Blok CIDR sebagai sensitif akan menyembunyikannya dalam output rencana.
$ terraform plan
Terraform akan melakukan tindakan berikut:
# alicloud_vpc.my-vpc akan dibuat
+ resource "alicloud_vpc" "my-vpc" {
+ cidr_block = (nilai sensitif)
+ create_time = (diketahui setelah apply)
+ id = (diketahui setelah apply)
+ status = (diketahui setelah apply)
+ user_cidrs = (diketahui setelah apply)
+ vpc_name = "main-vpc"
...
}
Rencana: 1 untuk ditambahkan, 0 untuk diubah, 0 untuk dihapus.validation
Blok validation memungkinkan Anda menegakkan aturan khusus untuk nilai input dan berisi dua argumen: condition, ekspresi boolean yang harus dievaluasi menjadi true, dan error_message, teks yang ditampilkan saat validasi gagal (kedua argumen diperlukan).
Pada contoh berikut, length dan substr memastikan bahwa vpc_name memiliki lebih dari empat karakter dan dimulai dengan tf-:
variable "vpc_name" {
validation {
condition = length(var.vpc_name) > 4 && substr(var.vpc_name, 0, 3) == "tf-"
error_message = "Nama vpc harus dimulai dengan 'tf-' dan lebih panjang dari 4 karakter."
}
}Jika Anda menjalankan terraform plan dan nilai input untuk vpc_name adalah my-vpc, validasi akan gagal dan Terraform akan mencetak pesan kesalahan kustom:

Metode untuk menetapkan variabel
Anda dapat menetapkan nilai variabel pada waktu proses menggunakan berbagai metode:
# File .tfvars (direkomendasikan)
$ terraform apply -var-file my-vars.tfvars
# Opsi CLI
$ terraform apply -var vpc_cidr_block=“172.16.0.0/16”
# Variabel lingkungan
$ export TF_VAR_vpc_dicr_block=“172.16.0.0/16”
$ terraform apply
# File variabel default: terraform.tfvars
$ terraform applyAnda dapat menggunakan file .tfvars untuk beralih antara set variabel serta membuat versinya sesuai dengan konfigurasi Anda. Opsi CLI sangat praktis untuk pengujian cepat. Variabel lingkungan berfungsi dengan baik dalam skrip dan pipeline CI/CD. Jika variabel yang diperlukan belum disetel, Terraform akan meminta nilai melalui CLI.
Saat perlu mendefinisikan banyak variabel, terutama yang kompleks, penggunaan opsi CLI menjadi kurang praktis. Sebagai alternatif, tentukan nilai-nilai tersebut dalam file dengan ekstensi .tfvars atau .tfvars.json, lalu sertakan menggunakan -var-file saat menjalankan terraform plan atau terraform apply:
$ terraform plan -var-file my-vars.tfvarsDefinisi variabel dalam file .tfvars menggunakan sintaks HCL dan hanya mencakup penugasan ke nama variabel. File varian JSON (.tfvars.json) berisi objek JSON untuk penugasan variabel. Jika file variabel bernama terraform.tfvars, terraform.tfvars.json, *.auto.tfvars, atau *.auto.tfvars.json, Terraform akan memuatnya secara otomatis untuk operasi plan dan apply, tanpa memerlukan flag -var-file. Saat beberapa sumber menetapkan variabel yang sama, Terraform menggunakan nilai dari sumber dengan prioritas tertinggi. Flag CLI (-var dan -var-file) menimpa nilai dari file yang dimuat secara otomatis, yang juga menimpa variabel lingkungan; nilai default hanya digunakan jika tidak ada nilai lain yang diberikan. Jika Anda memberikan beberapa flag -var atau -var-file, flag terakhir akan menimpa yang sebelumnya. Untuk menimpa nilai dari file .tfvars di baris perintah:
$ terraform plan -var="vpc_name=my-fisrt-vpc"Output plan akan menampilkan vpc_name sebagai my-first-vpc, bukan nilai dari file .tfvars.
Pendekatan ini umum digunakan dalam alur kerja otomatis, di mana -var mengambil nilai dari variabel lingkungan lain dan menggantikan nilai yang telah ditentukan sebelumnya dalam file variabel.
Jika variabel tidak diberi nilai oleh metode apa pun, Terraform akan meminta Anda untuk mengisi nilai saat menjalankan plan atau apply. Sebagai contoh, jika vpc_name tidak memiliki nilai default dan Anda tidak menggunakan opsi -var atau -var-file, CLI akan meminta Anda untuk memasukkan nilainya secara manual.

Praktik terbaik untuk variabel
Kami merekomendasikan hal-hal berikut saat mendeklarasikan variabel:
Parameterisasi hanya nilai yang berubah untuk setiap instans atau lingkungan.
Ekspos variabel hanya jika ada kasus penggunaan yang jelas untuk memvariasikan nilai. Hindari parameterisasi berlebihan—pertahankan modul agar tetap sederhana secara default. Menambahkan variabel dengan
defaultumumnya kompatibel mundur; mengubah default dapat memengaruhi perilaku; menghapus variabel merupakan perubahan besar dan harus direncanakan dengan hati-hati.Gunakan file
.tfvarskapan pun memungkinkan.Di modul root, gunakan file variabel untuk menetapkan nilai. Hindari beralih antara file dan flag CLI. Opsi baris perintah (seperti
-vardan-var-file) bersifat sementara, mudah dilupakan, dan tidak dapat diverifikasi. File variabel (misalnya,terraform.tfvarsatau*.auto.tfvars) lebih dapat diprediksi dan dapat dikomit ke kontrol sumber.Beri nama variabel sesuai dengan tujuannya.
Untuk input numerik (ukuran disk, memori, durasi), sertakan unit dalam nama saat memungkinkan (misalnya,
disk_size_gb,bandwidth_mbps,subscription_days). Jika API penyedia menggunakan unit non-standar, konvensi ini menjelaskan input yang diharapkan. Untuk input logis, gunakan boolean yang dinyatakan secara positif (misalnya,enable_ipv6) untuk menyederhanakan logika kondisional.Variabel harus memiliki deskripsi.
Sertakan
descriptionuntuk setiapvariable. Deskripsi muncul dalam prompt dan dokumen yang dihasilkan, memberikan konteks bagi kontributor baru serta meningkatkan keterbacaan dan kemudahan pemeliharaan. Tulis deskripsi dari perspektif pengguna—nilai apa yang harus disediakan dan mengapa.