Memahami variabel Terraform, nilai lokal, dan output - AWS Panduan Preskriptif

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. Variabel dapat dideklarasikan di mana saja dalam file konfigurasi Terraform dan biasanya dideklarasikan dengan tipe data yang diperlukan atau nilai default. Ketiga ekspresi berikut adalah deklarasi variabel Terraform yang valid.

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, sebagai variabel lingkungan, atau dalam file terraform.tfvars. Contoh berikut menunjukkan cara memasukkan nilai variabel dalam file terraform.tfvars, yang disimpan di direktori tingkat atas modul.

# 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 untuk true mencegah nilai variabel terekspos dalam output proses Terraform. 

  • nullable— Mengatur ini untuk true 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 output. CloudFormation Keduanya digunakan untuk mengekspos nilai dari dalam tumpukan penyebaran. Namun, karena modul Terraform lebih mendarah daging ke dalam struktur alat, nilai keluaran Terraform juga digunakan untuk mengekspos nilai dalam modul ke modul induk atau modul anak lainnya, bahkan jika modul tersebut semuanya berada dalam tumpukan penerapan yang sama. Jika Anda sedang membangun dua modul kustom dan modul pertama perlu mengakses nilai ID dari modul kedua, maka Anda harus menambahkan output 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." } }