Belajar Terraform dari Nol, Panduan Santai untuk Sysadmin & Developer

Kamandanu Wijaya 22 Januari 2026 ⏱️ 5 menit baca
Ilustrasi Workflow Terraform: Write, Plan, Apply

Pernah gak sih, kamu ngerasa capek banget config server satu-satu? Login SSH, install update, setup Nginx, config firewall. eh, pas pindah ke server lain, harus ngulang lagi dari awal. Kalo servernya cuma satu dua sih oke lah, tapi kalo udah puluhan? Bisa keriting jari kamu.

Di artikel ini, kita membahas Terraform dasar secara praktis agar kamu paham konteks dan penerapannya.

Saya juga pernah ada di posisi itu. Dulu, saya pikir “Scripting pake bash aja cukup lah!”. Tapi pas infrastruktur makin kompleks, script bash saya jadi makin susah dimaintain dan sering error sana-sini.

Nah, kenalan yuk sama Terraform. Tools ini bakal ngubah cara pandang kamu soal ngelola infrastruktur. Kalo kamu seorang Sysadmin, DevOps Engineer, atau Developer yang sering mainan cloud, skill ini wajib banget kamu punya.

Yuk, kita bedah bareng-bareng dari nol, tapi dengan bahasa yang manusiawi dan fokus teknis yang jelas.

Apa itu Terraform sebenarnya?

Simpelnya gini: Terraform itu tools buat Infrastructure as Code (IaC).

Bayangin kamu arsitek. Daripada kamu bangun gedung dengan cara tumpuk bata satu-satu secara manual di lapangan (yang rentan salah pasang), kamu bikin cetak biru (blueprint) digital yang detail banget. Pas kamu kasih cetak biru itu ke kontraktor robot canggih, dia bakal bangun gedung yang PERSIS sama kayak di gambar. Mau bangun 1 gedung atau 100 gedung? Hasilnya bakal konsisten.

Di dunia IT, “gedung” itu adalah server, database, network, dan firewall kamu. Terraform adalah cara kamu nulis cetak birunya, dan dia juga yang jadi kontraktornya buat ngomong ke Cloud Provider (AWS, GCP, Azure, dll).

Ilustrasi Workflow Terraform

Kenapa harus pake Terraform?

  1. Anti Lupa: Pernah gak kamu ubah config di production manual, trus lupa documentasiin? Terus 3 bulan kemudian server crash dan kamu bingung balikinnya gimana? Pake Terraform, kode kamu adalah dokumentasi kamu.
  2. Konsisten: Environment Development, Staging, sama Production bisa dipastikan 100% mirip. Gak ada lagi drama “Lah, di laptop saya jalan kok!”.
  3. Agnostik: Kamu bisa pake Terraform buat AWS, Google Cloud, Azure, Cloudflare, bahkan Docker di lokal kamu. Bahasanya (HCL) tetep sama, cuma beda module dikit.

Struktur kode Terraform (hcl) yang wajib paham

Di Terraform, kamu akan sering lihat blok berikut:

  • provider: jembatan ke platform (AWS, GCP, Docker, dsb).
  • resource: objek yang kamu buat (VM, database, bucket).
  • data: ambil data yang sudah ada (contoh: VPC existing).
  • variable: parameter agar kode reusable.
  • output: nilai yang ingin ditampilkan setelah apply.

Contoh ringkas:

variable "region" {
  type    = string
  default = "ap-southeast-1"
}

provider "aws" {
  region = var.region
}

resource "aws_s3_bucket" "log" {
  bucket = "log-aplikasi-kamu"
}

output "bucket_name" {
  value = aws_s3_bucket.log.id
}

Persiapan tempur: install Terraform

Oke, cukup teorinya. Sekarang kita kotor-kotoran dikit. Install Terraform itu gampang banget.

Kalo kamu pake Linux (Ubuntu/Debian), tinggal sikat:

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update
sudo apt-get install terraform

Buat pengguna Mac (pake Homebrew):

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

Dah, beres. Cek dulu udah keinstall beneran belum:

terraform -v

Kalo keluar versinya, berarti kamu siap lanjut!


Proyek pertama: hello world versi infrastruktur

Sesuai tradisi, kita gak bakal belajar kalo gak praktek. Kita bakal coba bikin sebuah file text sederhana di lokal dulu. Kenapa lokal? Biar kamu gak kaget kena tagihan cloud pas lagi belajar.

Bikin folder baru buat proyek kamu:

mkdir belajar-terraform
cd belajar-terraform

Bikin file bernama main.tf. Ekstensi .tf itu tandanya file Terraform.

# main.tf

resource "local_file" "surat_cinta" {
  filename = "${path.module}/pesan.txt"
  content  = "Halo, ini surat cinta dari Terraform! Infrastruktur itu seru lho."
}

Disini kita pake provider local, yang gunanya buat ngelola resource di mesin lokal kamu (kayak file).

The holy trinity: init, plan, apply

Ada 3 mantra sakti di Terraform yang bakal kamu ulang-ulang terus saat bekerja dengan Terraform:

Terraform init

Ini langkah inisialisasi. Terraform bakal baca file config kamu, liat provider apa yang kamu pake (di sini provider local), terus download plugin yang dibutuhkan.

terraform init

Kamu bakal liat tulisan hijau segar: Terraform has been successfully initialized!

Terraform plan

Ini tahap paling penting buat nyegah “Oops moment”. Perintah ini nyuruh Terraform buat simulasi: “Eh, kalo saya jalanin ini, apa yang bakal terjadi?”. Dia GAK BAKAL ngubah apa-apa, cuma ngasih laporan.

terraform plan

Outputnya bakal bilang dia mau create (+ resource “local_file” “surat_cinta”).

Terraform apply

Kalo kamu udah yakin sama plannya, sikat!

terraform apply

Dia bakal nanya lagi “Are you sure?”, ketik yes dan enter.

Terminal Terraform Init dan Apply

Coba cek folder kamu sekarang:

ls -l
cat pesan.txt

Boom! File pesan.txt muncul dengan isi sesuai yang kamu tulis di kode. Magic? Bukan, itu engineering.


State file: otak dari Terraform

Terraform menyimpan “keadaan” infrastruktur di file terraform.tfstate. Di sinilah Terraform tahu resource mana yang sudah dibuat dan bagaimana relasinya.

Hal penting:

  • Jangan edit manual file state.
  • Simpan state di tempat aman (backend remote) untuk tim.
  • Gunakan locking agar tidak ada dua orang apply bersamaan.

Backend populer:

  • S3 + DynamoDB (AWS)
  • GCS (GCP)
  • Terraform Cloud

Contoh konfigurasi backend (S3):

terraform {
  backend "s3" {
    bucket         = "tfstate-prod"
    key            = "network/terraform.tfstate"
    region         = "ap-southeast-1"
    dynamodb_table = "tfstate-lock"
  }
}

Drift detection: saat realita beda dengan kode

Kadang ada orang “nakal” yang klik-klik di console cloud. Akibatnya, resource di lapangan beda dengan yang ada di kode.

Gunakan:

  • terraform plan untuk melihat drift.
  • terraform refresh (atau plan modern) untuk sinkronisasi state.

Prinsipnya: kode adalah sumber kebenaran. Hindari perubahan manual di cloud.


Naik level: studi kasus real (Docker)

Oke, bikin file doang mah gampang. Sekarang kita coba spin up sebuah container Docker Nginx. Pastiin kamu udah install Docker ya.

Ubah isi main.tf jadi gini:

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.1"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx_server" {
  image = docker_image.nginx.image_id
  name  = "server_web_kamu"

  ports {
    internal = 80
    external = 8080
  }
}

Jalanin mantranya lagi:

  1. terraform init (karena kita nambah provider baru: docker)
  2. terraform apply

Tunggu bentar, dan coba buka browser kamu di localhost:8080. Kalau muncul halaman Welcome to nginx!, selamat! Kamu baru aja deploy infrastruktur web server pake kode. Keren gak tuh?

Pas kamu udah bosen, kamu bisa hancurkan semuanya dengan satu perintah bersih:

terraform destroy

Semua resource yang dibuat Terraform bakal dihapus. Bersih, rapi, tanpa sisa sampah config.


Modul dan reusability

Kalau infrastruktur mulai besar, kamu harus bikin kode reusable. Di sinilah module berperan.

Struktur module sederhana:

  • modules/vpc
  • modules/ecs
  • modules/rds

Keuntungan:

  • konsistensi antar environment.
  • kode lebih rapi.
  • perubahan terkontrol.

Dependency dan lifecycle

Terraform menghitung dependency otomatis. Tapi kadang kamu perlu eksplisit:

  • depends_on: paksa urutan eksekusi.
  • lifecycle: atur perilaku resource.

Contoh:

resource "aws_instance" "app" {
  ami           = "ami-xxxx"
  instance_type = "t3.micro"

  lifecycle {
    prevent_destroy = true
  }
}

prevent_destroy sangat berguna untuk resource kritikal seperti database.


Environment: workspace dan variable files

Untuk membedakan dev/staging/prod:

  • terraform workspace
  • file terraform.tfvars

Contoh:

terraform workspace new staging
terraform apply -var-file=staging.tfvars

Jangan hardcode nilai environment di kode. Pisahkan lewat variable.


Praktik aman di production

  • terraform fmt dan terraform validate sebelum commit.
  • simpan secrets di Vault/SSM/Secrets Manager, bukan di .tf.
  • review plan di CI sebelum apply.

Kesalahan pemula yang sering kejadian

Saya belajar ini dari pengalaman pahit, jadi kamu gak perlu ngulang kesalahan saya:

  1. Lupa terraform plan: Jangan pernah langsung apply. Selalu cek plan dulu. Kadang Terraform berniat menghapus database kamu karena salah config dikit, dan plan adalah satu-satunya warning yang kamu dapet.
  2. State File (terraform.tfstate) Ilang: Pas kamu jalanin resource, Terraform nyimpen “keadaan” infrastruktur kamu di file .tfstate. Jaga file ini baik-baik! Kalo ilang, Terraform bakal lupa dia pernah bikin resource apa aja.
  3. Hardcode Credentials: JANGAN PERNAH masukin Access Key atau password di file .tf. Pake environment variables atau variable files yang diignore sama Git.
  4. Tidak Pakai Backend Remote: Untuk kerja tim, lokal state itu risiko besar.
  5. Kode Monolitik: Semua resource di satu file bikin susah maintenance. Pakai module dan struktur folder.

Penutup

Belajar Terraform itu kayak belajar naik sepeda. Awalnya mungkin kerasa aneh, banyak istilah baru kayak state, provider, module. Tapi begitu kamu lancar, kamu bakal ngerasa punya kekuatan super. Kamu bisa bangun infrastruktur skala enterprise cuma sambil nyeruput kopi.

Saran saya habis ini cobain main ke cloud provider gratisan (kayak AWS Free Tier). Coba bikin satu EC2 instance pake Terraform. Rasain bedanya dibanding klik-klik manual di console.

Terraform sering digunakan bersama dengan tool DevOps lainnya. Untuk containerization, pelajari Docker dari nol. Untuk konfigurasi server secara otomatis setelah provisioning, kombinasikan dengan Ansible automation.

Selamat ngoding infrastruktur! Kalau ada error, jangan panik. Baca log-nya, baca documentasinya, dan lakukan iterasi kecil.


Semoga pembahasan Terraform dasar ini membantu kamu mengambil keputusan yang lebih tepat di lapangan.

Checklist Implementasi

  • Uji langkah di lab terlebih dulu sebelum produksi.
  • Dokumentasikan konfigurasi, versi, dan langkah rollback.
  • Aktifkan monitoring + alert untuk komponen yang diubah.
  • Audit akses dan terapkan prinsip least privilege.

Butuh Bantuan?

Jika ingin implementasi aman di produksi, saya bisa bantu assessment, eksekusi, dan hardening.

Hubungi Saya
Kamandanu Wijaya

Tentang Penulis

Kamandanu Wijaya

IT Infrastructure & Network Administrator

Administrator infrastruktur & jaringan dengan pengalaman enterprise 14+ tahun, fokus stabilitas, keamanan, dan automasi.

Sertifikasi: Google IT Support, Cisco Networking Academy, DevOps.

Lihat Profil

Butuh Solusi IT?

Tim DoWithSudo siap membantu setup server, VPS, dan sistem keamanan lo.

Hubungi Kami

Artikel Terkait

WhatsApp