Pendahuluan
Artikel ini menjelaskan perbedaan antara Variabel dan Lokal dalam Terraform.
Variabel dalam Terraform
Dalam Terraform, Variabel digunakan untuk menyediakan input yang dapat dikonfigurasi ke modul Terraform Anda. Ini memungkinkan elemen-elemen dalam modul Anda untuk disesuaikan tanpa mengubah kode sumber modul itu sendiri, dan dengan demikian memungkinkan penggunaan kembali modul tanpa modifikasi.
Batasan dalam Definisi
Tidak seperti bahasa pemrograman lainnya, variabel dalam Terraform tidak mengizinkan ekspresi bersyarat saat definisi.
variable "image_id" {
type = string
}
Menimpa Variabel Eksternal
Variabel yang didefinisikan dalam Terraform dapat ditimpa oleh variabel eksternal, memberikan fleksibilitas dalam penyesuaian nilai berdasarkan lingkungan atau kondisi yang berbeda.
Menetapkan Nilai pada Variabel
Variabel dalam Terraform dapat diberi nilai dengan beberapa cara.
Input Interaktif saat Eksekusi apply
Ketika menjalankan perintah terraform apply
, Terraform akan meminta input secara interaktif untuk setiap variabel yang belum diberi nilai.
$ terraform apply
var.image_id
Enter a value:
Menentukan Opsi melalui Baris Perintah (-var, -var-file)
Anda juga dapat memberikan nilai variabel langsung melalui baris perintah dengan opsi -var
atau -var-file
.
$ terraform apply -var="image_id=ami-abc123"
Menentukan Nilai dalam Berkas terraform.tfvars
Nilai untuk variabel dapat ditentukan dalam berkas terraform.tfvars
. Terraform secara otomatis akan memuat berkas ini jika ada.
image_id = "ami-abc123"
Menentukan Nilai menggunakan Variabel Lingkungan (TF_VAR_xxx)
Terraform juga akan membaca variabel lingkungan dengan nama TF_VAR_nama
untuk mencari nilai dari sebuah variabel.
$ export TF_VAR_image_id=ami-abc123
$ terraform apply
Menetapkan Nilai Default saat Definisi Variabel
Terakhir, Anda dapat menentukan nilai default langsung dalam definisi variabel, yang akan digunakan jika tidak ada nilai lain yang diberikan.
variable "image_id" {
type = string
default = "ami-abc123"
}
Lokal dalam Terraform
Nilai lokal, umumnya dikenal sebagai "locals," dalam Terraform, adalah ekspresi yang diberi nama yang dapat digunakan sebagai kemudahan untuk menghindari pengulangan nilai atau ekspresi yang sama beberapa kali dalam konfigurasi.
Penggunaan Ekspresi Bersyarat saat Definisi
Berbeda dengan variabel, lokal memungkinkan penggunaan ekspresi bersyarat (operator ternary) saat definisinya.
locals {
count = var.is_prod ? 1 : 0
}
Tidak Dapat Ditimpa oleh Sumber Eksternal
Berbeda dengan variabel, lokal tidak dapat ditimpa oleh sumber eksternal. Hal ini berarti bahwa mereka dapat memberikan stabilitas dan prediktabilitas dalam konfigurasi Terraform Anda.
Kemampuan untuk Menjelaskan Beberapa Kali
Lokal dapat didefinisikan beberapa kali dalam konfigurasi Anda, masing-masing dengan nilai yang berbeda.
locals {
server_name = "hoge"
server_core = 1
server_memory = 2
}
Kasus Penggunaan Variabel dan Lokal
Memanfaatkan Lokal dalam Berkas tf
Ketika menangani variabel dalam berkas tf, biasanya lebih disukai untuk menggunakan lokal karena mereka memberikan stabilitas dan mengurangi pengulangan dalam konfigurasi Anda. Misalnya, jika Anda memiliki nilai atau ekspresi umum yang digunakan di beberapa tempat dalam konfigurasi Anda, Anda dapat mendefinisikannya sekali sebagai lokal dan kemudian merujuk nilai lokal tersebut.
locals {
common_value = "shared_among_resources"
}
resource "aws_instance" "example" {
ami = local.common_value
instance_type = "t2.micro"
}
resource "aws_ebs_volume" "example" {
availability_zone = "us-west-2a"
size = 40
tags = {
Name = local.common_value
}
}
Menggunakan Variabel saat Input Eksternal Diperlukan
Namun, dalam kasus di mana Anda perlu memasukkan nilai dari sumber eksternal, variabel menjadi sangat penting.
variable "instance_type" {
description = "The instance type to use for our EC2 Instance"
type = string
default = "t2.micro"
}
resource "aws_instance" "example" {
ami = "ami-abc123"
instance_type = var.instance_type
}
Rekomendasi Penggunaan Variabel dan Lokal
Lokal cocok untuk mengorganisir ekspresi kompleks dan mengulang nilai umum, sedangkan Variabel cocok saat Anda ingin menyesuaikan konfigurasi secara eksternal.