Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memahami variabel Terraform, nilai lokal, dan output
Variabel meningkatkan fleksibilitas kode dengan memungkinkan placeholder dalam blok kode. Variabel dapat mewakili nilai yang berbeda setiap kali kode digunakan kembali. Terraform membedakan antara tipe variabelnya berdasarkan ruang lingkup modularnya. Variabel input adalah nilai eksternal yang dapat disuntikkan ke dalam modul, nilai output adalah nilai internal yang dapat dibagi secara eksternal, dan nilai lokal selalu berada dalam lingkup aslinya.
Variabel
AWS CloudFormation menggunakan parameter untuk mewakili nilai kustom yang dapat diatur dan diatur ulang dari satu penyebaran tumpukan ke yang berikutnya. Demikian pula, Terraform menggunakan variabel input, atau variabel
variable "thing_i_made_up" { type = string } variable "random_number" { default = 5 } variable "dogs" { type = list(object({ name = string breed = string })) default = [ { name = "Sparky", breed = "poodle" } ] }
Untuk mengakses breed Sparky dalam konfigurasi, Anda akan menggunakan variabelvar.dogs[0].breed
. Jika variabel tidak memiliki default dan tidak diklasifikasikan sebagai nullable, maka nilai variabel harus ditetapkan untuk setiap penerapan. Jika tidak, itu opsional untuk menetapkan nilai baru untuk variabel. Dalam modul root, Anda dapat mengatur nilai variabel saat ini pada baris perintah
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
Nilai untuk dogs
dalam contoh file terraform.tfvars ini akan mengganti nilai default dalam deklarasi variabel. Jika Anda mendeklarasikan variabel dalam modul anak, Anda dapat mengatur nilai variabel langsung dalam blok deklarasi modul, seperti yang ditunjukkan pada contoh berikut.
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
Beberapa argumen lain yang dapat Anda gunakan saat mendeklarasikan variabel meliputi:
-
sensitive
— Menyetel ini untuktrue
mencegah nilai variabel terekspos dalam output proses Terraform. -
nullable
— Mengatur ini untuktrue
memungkinkan variabel tidak memiliki nilai. Ini nyaman untuk variabel di mana default tidak diatur. -
description
— Tambahkan deskripsi variabel ke metadata untuk tumpukan. -
validation
— Tetapkan aturan validasi untuk variabel.
Salah satu aspek yang paling nyaman dari variabel Terraform adalah kemampuan untuk menambahkan satu atau lebih objek validasi dalam deklarasi variabel. Anda dapat menggunakan objek validasi untuk menambahkan kondisi yang harus dilewati variabel atau penerapan gagal. Anda juga dapat mengatur pesan kesalahan kustom untuk ditampilkan setiap kali kondisi dilanggar.
Misalnya, Anda menyiapkan file konfigurasi Terraform yang akan dijalankan oleh anggota tim Anda. Sebelum menerapkan tumpukan, anggota tim perlu membuat file terraform.tfvars untuk menetapkan nilai konfigurasi penting. Untuk mengingatkan mereka, Anda bisa melakukan sesuatu seperti berikut ini.
variable "important_config_setting" { type = string validation { condition = length(var.important_config_setting) > 0 error_message = "Don't forget to create the terraform.tfvars file!" } validation { condition = substr(var.important_config_setting, 0, 7) == "prefix-" error_message = "Remember that the value always needs to start with 'prefix-'" } }
Seperti yang ditunjukkan dalam contoh ini, Anda dapat mengatur beberapa kondisi di dalam variabel tunggal. Terraform hanya menampilkan pesan kesalahan untuk kondisi gagal. Dengan cara ini, Anda dapat menegakkan semua jenis aturan pada nilai variabel. Jika nilai variabel menyebabkan kegagalan pipeline, Anda akan tahu persis mengapa.
Nilai-nilai lokal
Jika ada nilai dalam modul yang Anda ingin alias, gunakan locals
kata kunci daripada mendeklarasikan variabel default yang tidak akan pernah diperbarui. Seperti namanya, locals
blok berisi istilah yang dicakup secara internal ke modul tertentu. Jika Anda ingin mengubah nilai string, seperti dengan menambahkan awalan ke nilai variabel untuk digunakan dalam nama sumber daya, menggunakan nilai lokal mungkin merupakan solusi yang baik. Satu locals
blok dapat mendeklarasikan semua nilai lokal untuk modul Anda, seperti yang ditunjukkan pada contoh berikut.
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
Ingatlah bahwa ketika Anda mengakses nilai, locals
kata kunci menjadi tunggal, seperti. local.LocalConfigId
Nilai keluaran
Jika variabel input Terraform seperti CloudFormation parameter, maka Anda dapat mengatakan bahwa nilai keluaran Terraform seperti outputoutput
blok berikut ke modul kedua.
output "module_id" { value = local.module_id } Then in the first module you could use it like this: module "first_module" { source = "path/to/first/module" } resource "example_resource" "example_resource_name" { module_id = module.first_module.module_id }
Karena nilai keluaran Terraform dapat digunakan dalam tumpukan yang sama, Anda juga dapat menggunakan sensitive
atribut dalam output
blok untuk menekan nilai agar tidak ditampilkan dalam output tumpukan. Selain itu, output
blok dapat menggunakan precondition
blok dengan cara yang sama seperti variabel menggunakan validation
blok: untuk memastikan variabel mengikuti seperangkat aturan tertentu. Ini membantu memastikan bahwa semua nilai dalam modul ada seperti yang diharapkan sebelum melanjutkan dengan penerapan.
output "important_config_setting" { value = var.important_config_setting precondition { condition = length(var.important_config_setting) > 0 error_message = "You forgot to create the terraform.tfvars file again." } }