Traffine I/O

Bahasa Indonesia

2022-10-12

Variabel vs. Lokal dalam Terraform

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.

bash
$ 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.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!