CLI #

Terraform dioperasikan sepenuhnya melalui command line. Memahami perintah-perintah CLI Terraform — bukan hanya cara menjalankannya, tapi juga cara membaca outputnya dan kapan menggunakan flag tertentu — adalah keterampilan dasar yang akan kamu gunakan setiap hari. Artikel ini membahas perintah-perintah yang paling sering digunakan dalam praktik nyata.

Perintah Inti Workflow #

Empat perintah ini membentuk workflow inti Terraform yang akan kamu jalankan hampir setiap hari.

# 1. terraform init
# Inisialisasi direktori Terraform — download provider, setup backend
terraform init

# 2. terraform plan
# Lihat rencana perubahan tanpa menjalankannya
terraform plan

# 3. terraform apply
# Jalankan perubahan (minta konfirmasi dulu)
terraform apply

# 4. terraform destroy
# Hapus semua resource yang dikelola (minta konfirmasi dulu)
terraform destroy

terraform init #

terraform init harus dijalankan pertama kali di direktori baru, dan setiap kali ada perubahan pada provider atau backend configuration.

# Inisialisasi dasar
terraform init

# Output yang diharapkan:
# Initializing the backend...
# Initializing provider plugins...
# - Finding hashicorp/aws versions matching "~> 5.0"...
# - Installing hashicorp/aws v5.31.0...
# Terraform has been successfully initialized!

# Flag yang berguna:
terraform init -upgrade          # Update provider ke versi terbaru yang memenuhi constraint
terraform init -backend=false    # Inisialisasi tanpa setup backend (untuk testing)
terraform init -reconfigure      # Paksa reconfigure backend (berguna saat ganti backend)

Setelah init, Terraform membuat direktori .terraform/ yang berisi provider yang didownload. Direktori ini tidak perlu di-commit ke Git — cukup .terraform.lock.hcl-nya saja.


terraform plan #

terraform plan adalah perintah yang paling sering kamu gunakan untuk memverifikasi perubahan sebelum dijalankan.

# Plan dasar
terraform plan

# Simpan plan ke file (untuk apply yang deterministik)
terraform plan -out=tfplan
terraform apply tfplan  # Apply persis plan yang disimpan

# Flag yang berguna:
terraform plan -var="environment=production"   # Override variable
terraform plan -var-file="prod.tfvars"         # Gunakan file variable
terraform plan -target=aws_instance.web        # Plan hanya satu resource
terraform plan -refresh=false                  # Skip refresh state (lebih cepat)

Membaca Output Plan #

# Output plan — memahami simbol perubahan:

# + create (resource baru)
+ resource "aws_instance" "web" {
    + ami           = "ami-0abcdef1234567890"
    + instance_type = "t3.micro"
    + id            = (known after apply)
  }

# - destroy (resource akan dihapus)
- resource "aws_instance" "old" {
    - id = "i-0abcdef1234567890"
  }

# ~ update in-place (resource dimodifikasi)
~ resource "aws_instance" "web" {
    ~ instance_type = "t3.micro" -> "t3.small"
      id            = "i-0abcdef1234567890"
  }

# -/+ destroy and recreate (perubahan yang butuh replace)
-/+ resource "aws_instance" "web" {
    ~ ami = "ami-old" -> "ami-new"  # forces replacement
    - id  = "i-0abcdef1234567890"
    + id  = (known after apply)
  }

Perhatikan simbol -/+ — ini berarti resource akan dihapus dulu, baru dibuat ulang. Jika resource itu server production, ini berarti downtime.


terraform apply #

terraform apply menjalankan perubahan yang sudah direncanakan.

# Apply dengan konfirmasi interaktif
terraform apply

# Apply tanpa konfirmasi (untuk CI/CD)
terraform apply -auto-approve

# Apply dari saved plan (paling aman untuk production)
terraform plan -out=tfplan
terraform apply tfplan  # Tidak ada konfirmasi, langsung apply plan yang disimpan

# Flag yang berguna:
terraform apply -var="environment=production"
terraform apply -target=aws_instance.web      # Apply hanya satu resource
terraform apply -parallelism=5                # Batasi concurrent operations (default: 10)
Gunakan -auto-approve hanya di CI/CD pipeline yang sudah ada review process sebelumnya (misalnya: PR approval sebelum merge ke main branch). Menjalankan -auto-approve secara langsung di terminal production adalah risiko yang tidak perlu.

Perintah Inspeksi State #

Perintah-perintah ini membantu kamu memahami kondisi state saat ini.

# Lihat semua resource di state
terraform state list

# Output:
# aws_instance.web
# aws_security_group.web
# aws_subnet.public
# aws_vpc.main

# Lihat detail satu resource
terraform state show aws_instance.web

# Refresh state dari kondisi aktual di cloud
# (berguna jika ada perubahan yang dilakukan di luar Terraform)
terraform refresh

# Tampilkan output values
terraform output
terraform output instance_public_ip  # Output spesifik

Perintah untuk Troubleshooting #

# Validasi sintaks konfigurasi tanpa connect ke provider
terraform validate

# Format file konfigurasi secara konsisten
terraform fmt                 # Format semua file .tf di direktori saat ini
terraform fmt -recursive      # Termasuk subdirektori
terraform fmt -check          # Cek tanpa mengubah (untuk CI)

# Enable logging detail untuk debugging
TF_LOG=DEBUG terraform apply  # Level: TRACE, DEBUG, INFO, WARN, ERROR
TF_LOG_PATH=terraform.log terraform apply  # Simpan log ke file

# Lihat dependency graph (output dalam format DOT untuk Graphviz)
terraform graph | dot -Tpng > graph.png

Ringkasan #

  • Workflow inti: initplanapply — jalankan dalam urutan ini setiap kali bekerja dengan konfigurasi baru atau yang berubah.
  • Selalu baca output plan sebelum apply — pahami simbol +, -, ~, dan -/+ sebelum menekan enter.
  • -/+ berarti replace — resource dihapus dan dibuat ulang, bisa menyebabkan downtime untuk resource stateful.
  • Simpan plan dengan -out=tfplan untuk production — pastikan yang kamu apply adalah persis yang sudah di-review.
  • terraform fmt dan terraform validate adalah kebiasaan baik sebelum commit konfigurasi.
  • TF_LOG=DEBUG adalah teman terbaikmu saat ada yang tidak berjalan sesuai harapan.

← Sebelumnya: Instalasi   Berikutnya: Struktur Direktori →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact