Server/Infra 26 Aug 2026 44 views 0 komentar

Belajar Terraform untuk Pemula - Infrastructure as Code untuk Kelola VPS dan Cloud di 2026

Belajar Terraform untuk Pemula - Infrastructure as Code untuk Kelola VPS dan Cloud di 2026

Dulu saya selalu setup server secara manual. SSH ke VPS, install nginx, atur PHP-FPM, buat database, pasang SSL, lalu ulangi lagi di server berikutnya. Tiga server masih terasa wajar. Tapi begitu sudah belasan server, saya mulai lupa konfigurasi mana yang sudah diubah, mana yang belum, dan kenapa server produksi selalu beda sama server staging. Dari situ saya akhirnya belajar Terraform, dan cara kerja saya berubah total.

Terraform adalah tools open-source dari HashiCorp untuk otomatisasi infrastruktur. Kamu menulis konfigurasi dalam file teks biasa, lalu Terraform yang membuat, mengubah, atau menghapus server sesuai isi file tersebut. Konsep ini disebut Infrastructure as Code (IaC). Di artikel ini kita belajar dari nol: instalasi, konsep dasar, sampai deploy server beneran di provider cloud.

Apa Itu Infrastructure as Code?

Infrastructure as Code itu sederhananya: infrastruktur kamu (server, database, network, DNS) dijelaskan dalam bentuk kode, bukan diklik manual di dashboard. Kode ini disimpan di Git, bisa di-review, bisa di-rollback, dan bisa dipakai ulang untuk environment lain. Mau bikin staging yang mirip persis dengan produksi? Tinggal jalankan kode yang sama dengan nilai variable berbeda.

Kenapa ini penting? Karena setup manual itu rapuh. Satu langkah terlewat, konfigurasi ngaco, dan kamu baru sadar seminggu kemudian. Dengan IaC, prosesnya jadi repeatable dan dokumentasinya otomatis - kode itu sendiri adalah dokumentasi.

Terraform vs Ansible vs Docker, Jangan Ketuker

Banyak pemula bingung membedakan tiga tools ini. Wajar, karena fungsinya mirip-mirip di permukaan. Tapi sebenarnya beda layer:

  • Docker mengelola container di satu mesin. Dia fokus ke aplikasi: image, container, volume, network antar container.
  • Ansible mengelola konfigurasi di mesin yang sudah ada. Install package, copy file, restart service. Dia butuh server yang sudah jalan.
  • Terraform mengelola siklus hidup infrastruktur itu sendiri. Bikin server baru, resize, hapus. Dia bicara ke API provider (DigitalOcean, AWS, Vultr, dan lainnya).

Di dunia nyata, ketiganya sering dipakai bareng. Terraform bikin droplet-nya, Ansible atau cloud-init yang setup di dalam droplet, Docker yang jalanin aplikasinya. Kombinasi ini yang dipakai banyak tim DevOps di production.

Instalasi Terraform di Linux

Cara paling gampang di Ubuntu/Debian adalah pakai apt dengan repo resmi HashiCorp. Jalankan perintah ini satu per satu:


sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /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 install terraform

Setelah selesai, cek versinya:


terraform version

Kalau muncul angka versi, berarti Terraform sudah siap. Di macOS tinggal pakai Homebrew: brew install terraform. Di Windows bisa pakai Chocolatey atau download binary langsung dari releases.hashicorp.com.

Konsep Dasar: Provider, Resource, State

Sebelum nulis konfigurasi, kamu wajib paham tiga istilah ini:

  • Provider - plugin yang menghubungkan Terraform ke API cloud provider. Contoh: digitalocean/digitalocean, hashicorp/aws, hashicorp/google, vultr/vultr.
  • Resource - komponen infrastruktur yang mau dibuat, misalnya droplet, DNS record, atau firewall rule. Ditulis dalam blok resource.
  • State - file yang menyimpan kondisi infrastruktur saat ini. Terraform selalu membandingkan state dengan konfigurasi untuk tahu apa yang harus diubah.

Konsep state ini yang bikin Terraform beda dari script biasa. Script shell cuma "jalankan dan berharap berhasil". Terraform tahu persis apa yang sudah dibuat, jadi dia cuma mengubah yang perlu diubah.

Menulis Konfigurasi Pertama

Kita mulai dengan contoh paling umum: bikin droplet di DigitalOcean. Pertama, buat folder project:


mkdir belajar-terraform && cd belajar-terraform

Lalu buat file main.tf berisi:


terraform {
  required_providers {
    digitalocean = {
      source  = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }
}

provider "digitalocean" {
  token = var.do_token
}

resource "digitalocean_droplet" "web" {
  name     = "web-1"
  region   = "sgp1"
  size     = "s-1vcpu-1gb"
  image    = "ubuntu-24-04-x64"
  ssh_keys = [var.ssh_key_id]
}

Perhatikan struktur filenya. Blok terraform mendeklarasikan provider yang dipakai beserta versinya. Blok provider berisi konfigurasi koneksi, di sini token API. Blok resource adalah intinya: droplet bernama web-1 di region sgp1 (Singapura), ukuran 1 vCPU 1GB, image Ubuntu 24.04.

Biar rapi, kita pisahkan nilai yang bisa berubah ke file variables.tf:


variable "do_token" {
  description = "DigitalOcean API token"
  type        = string
}

variable "ssh_key_id" {
  description = "SSH key fingerprint atau ID"
  type        = string
}

Lalu siapkan file terraform.tfvars berisi nilai aslinya. File ini jangan pernah masuk Git karena berisi rahasia:


do_token   = "dop_v1_contoh_token_panjang_sekali"
ssh_key_id = "12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef"

Terraform Init, Plan, Apply

Sekarang saatnya menjalankan workflow utama Terraform. Tiga perintah yang bakal kamu pakai setiap hari:


terraform init
terraform plan
terraform apply

terraform init mengunduh plugin provider yang dibutuhkan. Jalan sekali di awal project, atau setiap kali menambah provider baru. terraform plan menunjukkan rencana perubahan: apa yang akan dibuat, diubah, atau dihapus - tanpa mengubah apapun. Ini semacam dry-run. terraform apply mengeksekusi rencana tersebut.

Saat pertama kali apply, Terraform akan bertanya konfirmasi. Ketik yes lalu enter. Beberapa detik kemudian, droplet kamu jadi. Cek di dashboard DigitalOcean, atau langsung pakai perintah:


terraform show

Perintah ini menampilkan atribut resource yang sudah dibuat, termasuk IP address droplet-nya. Biar lebih praktis, kita bisa menampilkan IP itu sebagai output:


output "droplet_ip" {
  value = digitalocean_droplet.web.ipv4_address
}

output "droplet_name" {
  value = digitalocean_droplet.web.name
}

Setelah apply, Terraform menampilkan output ini di layar. Nanti kalau kamu sudah pakai module atau remote state, output bisa diambil oleh project lain. Misalnya project Terraform untuk DNS butuh IP dari project Terraform untuk server - tinggal referensi output-nya, tidak perlu copas manual.

Update Infrastruktur Tanpa Drama

Inilah bagian yang paling saya suka. Mau upgrade droplet dari 1GB ke 2GB? Cukup ubah satu baris di main.tf:


size = "s-2vcpu-2gb"

Lalu jalankan terraform plan dan terraform apply lagi. Terraform akan mendeteksi perubahan size dan melakukan resize otomatis. Tidak perlu buka dashboard, tidak perlu klik-klik. Mau nambah droplet kedua? Tinggal duplikat blok resource dengan nama berbeda, atau lebih baik pakai count atau for_each untuk bikin banyak resource dari satu blok.

Auto-Install Nginx dengan Provisioner

Terraform bisa menjalankan script di server yang baru dibuat. Fitur ini disebut provisioner, dan paling simpel pakai tipe remote-exec:


resource "digitalocean_droplet" "web" {
  name     = "web-1"
  region   = "sgp1"
  size     = "s-1vcpu-1gb"
  image    = "ubuntu-24-04-x64"
  ssh_keys = [var.ssh_key_id]

  provisioner "remote-exec" {
    inline = [
      "apt-get update",
      "apt-get install -y nginx",
      "systemctl enable nginx"
    ]
  }
}

Perhatikan: provisioner butuh koneksi SSH ke droplet. Terraform otomatis memakai key yang kamu daftarkan di ssh_keys, jadi tidak perlu setup tambahan. Setelah apply, droplet langsung jalan dengan nginx terinstall. Bayangkan kalau kamu bikin 5 droplet sekaligus - semua langsung siap pakai tanpa sentuh terminal satu per satu.

State File dan Remote State

File terraform.tfstate otomatis dibuat setelah apply. Isinya JSON berisi seluruh kondisi infrastruktur. File ini penting banget, jangan sampai hilang. Kalau hilang, Terraform tidak tahu resource apa yang sudah ada, dan bisa bikin resource ganda.

Kalau kerja sendirian, state lokal di folder project masih oke. Tapi kalau kerja tim, atau mau lebih aman, simpan state di remote. Contohnya pakai backend S3 di AWS, atau Terraform Cloud yang punya free tier untuk pemakaian personal:


terraform {
  backend "s3" {
    bucket = "nama-bucket-state"
    key    = "production/terraform.tfstate"
    region = "ap-southeast-1"
  }
}

Dengan remote state, semua anggota tim memakai state yang sama, dan ada fitur state locking biar tidak ada yang apply bersamaan.

Terraform Bukan Cuma untuk Cloud Besar

Banyak yang mengira Terraform cuma buat AWS atau cloud raksasa. Padahal provider Terraform sudah tersedia untuk hampir semua layanan: Vultr, Hetzner, Linode, Cloudflare, bahkan provider VPS lokal. Mau catat DNS record di Cloudflare lewat Terraform? Bisa. Mau bikin firewall rule? Bisa. Sekali paham konsepnya, tinggal ganti provider block, sisanya sama.

Untuk VPS biasa tanpa API, kamu bisa kombinasi Terraform dengan cloud-init atau Ansible. Terraform bikin servernya, lalu menjalankan script setup otomatis. Ini pola yang banyak dipakai untuk staging environment.

DigitalOcean vs AWS vs Vultr untuk Belajar Terraform

Bingung mulai dari provider mana? Ini perbandingan singkat dari pengalaman saya:

  • DigitalOcean - paling ramah pemula. API-nya simpel, dokumentasi Terraform-nya lengkap, dan droplet termurah mulai sekitar 4 dollar per bulan. Token API gampang dibuat di dashboard. Pilihan terbaik untuk belajar.
  • AWS - paling banyak dipakai di industri, jadi skill-nya paling laku di pasar kerja. Tapi kurva belajarnya curam: istilahnya banyak (EC2, VPC, IAM, S3), dan free tier-nya gampang kelewat batas kalau tidak hati-hati.
  • Vultr - mirip DigitalOcean, harga kompetitif, dan kadang punya promo yang lebih menarik. Provider Terraform-nya resmi dan aktif di-maintain.
  • Hetzner - paling murah untuk spesifikasi tinggi, populer untuk project Eropa. Cocok kalau target user kamu di luar Indonesia.
  • Google Cloud - punya free tier yang lumayan, dan integrasi bagus kalau kamu sudah pakai ekosistem Google.

Saran saya: mulai dari DigitalOcean atau Vultr. Konsep Terraform di semua provider sama, jadi setelah kamu paham di satu tempat, pindah ke AWS tinggal belajar istilah barunya saja. Untuk belajar, jangan lupa cek berapa perkiraan biayanya sebelum apply - beberapa provider punya pricing calculator di websitenya.

Troubleshooting yang Sering Terjadi

Belajar Terraform pasti ketemu error. Ini beberapa yang paling sering saya alami:

  • Error locking state - biasanya karena proses apply sebelumnya gagal atau masih jalan. Hapus file lock di backend, atau tunggu proses selesai.
  • 401 Unauthorized - token API salah atau sudah expired. Generate ulang token di dashboard provider.
  • Provider tidak ketemu - lupa menjalankan terraform init setelah menambah provider baru.
  • Resource sudah ada di luar Terraform - solusinya pakai terraform import supaya resource yang dibuat manual masuk ke state.
  • Rate limit API - beberapa provider membatasi jumlah request per menit. Tunggu sebentar lalu coba lagi.
  • SSH connection timeout saat provisioner - biasanya droplet belum selesai boot. Tambah timeout di blok provisioner, misalnya 10 menit.
  • Perubahan tidak terdeteksi - cek dulu apakah kamu sedang di folder dengan state yang benar. Salah folder berarti salah state.

Tips debugging: selalu baca pesan error dari atas. Terraform biasanya menuliskan penyebab utama di baris pertama atau kedua, sisanya cuma konteks.

Best Practices dari Pengalaman

  • Simpan semua file .tf di Git, tapi tambahkan terraform.tfvars dan *.tfstate* ke .gitignore.
  • Pakai terraform fmt sebelum commit biar formatnya konsisten.
  • Pisahkan environment: folder dev/ dan prod/, atau pakai workspace.
  • Gunakan terraform plan di CI/CD sebagai review otomatis sebelum apply.
  • Jangan pernah hardcode secret di file .tf. Pakai variable dan environment variable.
  • Mulai dari satu resource dulu, pahami state-nya, baru scale ke infrastruktur besar.
  • Jalankan terraform destroy untuk environment percobaan sebelum tidur, biar tidak ada biaya mengalir percuma.

terraform destroy - Biar Dompet Aman

Satu perintah yang sering dilupakan pemula: terraform destroy. Perintah ini menghapus semua resource yang ada di state. Sangat berguna untuk environment belajar atau staging yang hanya dipakai sementara:


terraform destroy

Sama seperti apply, Terraform akan menampilkan rencana penghapusan dan minta konfirmasi. Ini alasan kenapa state itu penting - tanpa state, kamu harus hapus resource satu per satu secara manual di dashboard, dan seringkali ada yang terlewat. Dengan destroy, semua beres sekaligus.

Kebiasaan yang saya terapkan: setiap bikin environment percobaan, langsung catat di reminder untuk destroy di akhir hari. Biaya server kecil memang, tapi kalau lupa dan dibiarkan sebulan, tagihan bulanan jadi membengkak tanpa hasil apa-apa.

Kesimpulan

Terraform mengubah cara saya mengelola server. Dari yang tadinya manual dan menakutkan, jadi declarative dan bisa diulang kapan saja. Modal awalnya memang agak bikin pusing - istilahnya banyak, konsep state butuh waktu - tapi setelah lewat satu atau dua project, semuanya terasa natural.

Kalau kamu baru mulai, saran saya: buat satu droplet kecil dengan Terraform, hapus, bikin lagi. Rasakan siklus create-update-delete itu. Dari situ kamu bakal paham kenapa Infrastructure as Code itu worth it. Kamu sendiri pakai Terraform untuk apa? Atau masih ragu mau mulai? Tulis di kolom komentar ya.


Bagikan artikel ini:

Komentar (0)

Belum ada komentar. Jadilah yang pertama memberikan tanggapan!

Tinggalkan Komentar