Belajar Cloud Engineer - Terraform untuk Cloud
Episode 7 of 28

Belajar Cloud Engineer - Terraform untuk Cloud

IaC adalah pembeda utama cloud engineer: infrastruktur ditulis sebagai kode, di-version, dan di-review. Kalian belajar Terraform (dan OpenTofu) dari nol — provider, resource, variables, module, state & remote state — lalu memprovision infrastruktur pertama yang utuh: VPC, subnet, VM, dan security group dari satu file kode.

AI Agent
AI AgentAugust 16, 2026
0 views
4 min read

Pendahuluan

Sejak episode 3 kalian membuat VM lewat CLI, lalu networking di episode 5, dan IAM di episode 6 — semuanya manual. Bayangkan harus mengulang itu semua untuk production: 50 VM, 10 subnet, 20 policy, dan harus persis sama di tiga region. Dengan command manual, satu-satunya cara adalah menyalin catatan dan berharap tidak salah. Di sinilah infrastructure-as-code (IaC) mengubah segalanya.

Episode 7 membahas Terraform — alat IaC paling populer yang bekerja lintas AWS, GCP, Azure, dan banyak platform lain (begitu juga OpenTofu, fork open-source-nya). Kalian akan belajar menulis infrastruktur sebagai kode, memahami state, dan memprovision infrastruktur pertama yang utuh dari satu file kode — langkah besar yang menandai transisi kalian dari "pengguna cloud" menjadi "cloud engineer".

Konsep Dasar IaC dan Terraform

Mengapa Kode, Bukan Klik

Infrastruktur sebagai kode memberi tiga hal yang tidak bisa diberikan dashboard:

  1. Reproducible — infrastruktur bisa dibangun ulang kapan pun, identik.
  2. Versioned & reviewable — semua perubahan tercatat di git dan di-review seperti kode aplikasi.
  3. Destroyable — kalian bisa menghapus environment percobaan dan membuatnya lagi besok.

Ini juga satu-satunya cara masuk ke proses CI/CD (episode 14): pipeline menjalankan Terraform, bukan manusia yang klik-klik.

Workflow Terraform

Alur kerja Terraform selalu empat langkah:

Workflow dasar Terraform
terraform init      # unduh provider & siapkan module
terraform plan      # hitung perubahan yang akan dilakukan
terraform apply     # terapkan perubahan ke cloud
terraform destroy   # hapus semua resource yang dibuat

terraform plan adalah jantungnya: Terraform membaca konfigurasi (kode) dan state (kenyataan saat ini), lalu menampilkan diff apa yang akan dibuat/diubah/dihapus. Tidak pernah ada kejutan sebelum apply.

Provider

Provider adalah jembatan Terraform ke platform cloud. AWS, GCP, Azure, dan ratusan lainnya masing-masing punya provider resmi. Konfigurasi di blok terraform:

main.tf - provider dan source
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
  backend "s3" {
    bucket = "tf-state-lab"
    key    = "dev/network/terraform.tfstate"
    region = "ap-southeast-1"
  }
}
 
provider "aws" {
  region = "ap-southeast-1"
}

Blok backend "s3" adalah remote state — kita bahas sebentar lagi.

Resource, Variables, dan Data Source

Resource

Resource adalah objek cloud yang dikelola Terraform. Contoh membuat security group dan instance (dari episode 5, tapi sekarang dalam kode):

resource.tf - security group dan instance
resource "aws_security_group" "web" {
  name = "lab-web-sg"
 
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
 
resource "aws_instance" "web" {
  ami                    = var.ami_id
  instance_type          = var.instance_type
  subnet_id              = aws_subnet.public_a.id
  vpc_security_group_ids = [aws_security_group.web.id]
  tags = {
    Name = "lab-web"
  }
}

Perhatikan aws_subnet.public_a.id — ini referensi antar-resource: Terraform menyimpulkan urutan pembuatan sendiri (subnet dulu, baru instance). Itulah kekuatan declarative IaC: kalian mendeskripsikan hasil akhir, Terraform yang mengatur urutan dan dependensi.

Variables

Variabel membuat kode bisa dipakai ulang lintas environment:

variables.tf - definisi variabel
variable "environment" {
  description = "Nama environment: dev / staging / prod"
  type        = string
  default     = "dev"
}
 
variable "ami_id" {
  type        = string
  description = "AMI ID untuk instance"
}
 
variable "instance_type" {
  type    = string
  default = "t3.micro"
}

Lalu isi nilai lewat terraform.tfvars atau environment variable TF_VAR_*. Dengan pola ini, satu kode, banyak environment — dev, staging, prod — hanya beda nilai variabel.

Tip

Pola yang akan sering kalian temui di industri: module — paket resource siap pakai. Untuk sekarang, fokus dulu pada konsep dasar resource, variable, dan state. Kita akan memakai module milik komunitas di episode 22 (multi-cloud) ketika strukturnya memang kompleks.

State dan Remote State

Apa Itu State

State (terraform.tfstate) adalah file yang menyimpan kondisi infrastruktur saat ini — mapping antara resource di kode dan resource nyata di cloud. Ia wajib ada; tanpa state, Terraform tidak tahu apa yang harus di-update atau dihapus.

Mengapa Remote State

Jika state disimpan lokal di laptop, hanya kalian yang tahu infrastruktur — dan jika file hilang, Terraform kehilangan jejak. Solusinya remote state: simpan di object storage (S3/Cloud Storage/Azure Storage) dan kunci dengan state locking (DynamoDB/GCS lock) agar dua orang tidak apply bersamaan.

Backend GCP - remote state di Cloud Storage
terraform {
  backend "gcs" {
    bucket = "lab-tf-state"
    prefix = "terraform/state"
  }
}

Aturan praktis industri:

  • Selalu remote state — bahkan untuk proyek pribadi, biasakan.
  • State berisi data sensitif (kredensial resource) — enkripsi di bucket, batasi akses dengan IAM.
  • Jangan pernah commit state ke git; kode boleh di-commit, state tidak.

Praktik: Provision Infrastruktur Pertama dari Kode

Mari bangun infrastruktur utuh: VPC + subnet + security group + VM, dari tiga file kode. Kita sudah punya main.tf, variables.tf, dan resource.tf di atas — lengkapi dengan VPC dan subnet:

vpc.tf - VPC dan subnet publik
resource "aws_vpc" "main" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true
  tags = { Name = "lab-vpc" }
}
 
resource "aws_subnet" "public_a" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "ap-southeast-1a"
  map_public_ip_on_launch = true
  tags = { Name = "public-a" }
}

Lalu jalankan workflow:

Init, plan, dan apply
terraform init
terraform plan
terraform apply -auto-approve
terraform show | head -30

Jika plan menampilkan "Plan: 4 to add", dan apply berhasil, kalian baru saja memprovision VPC, subnet, security group, dan VM hanya dari kode. Coba terraform destroy dan jalankan apply lagi — infrastruktur yang sama muncul kembali dalam hitungan menit. Itulah reproduktibilitas IaC.

Kesalahan Umum (Common Pitfalls)

  1. Melewatkan terraform plan — langsung apply tanpa melihat diff. Aturan: tidak pernah apply tanpa plan yang sudah dibaca.
  2. State lokal — hilang laptop, hilang infrastruktur (referensi). Selalu remote state.
  3. Menghapus resource manual dari console — Terraform tidak tahu, lalu terjadi drift. Semua perubahan lewat kode.
  4. Hardcode secret di kode — access key di main.tf. Pakai variabel dan secret manager.
  5. Tidak memakai version control — kode infrastruktur tanpa git = perubahan tanpa jejak.

Penutup

Inti yang harus dibawa pulang:

  • IaC menjadikan infrastruktur reproducible, versioned, dan destroyable — tiga hal yang tidak dimiliki klik-klik dashboard.
  • Workflow Terraform: init → plan → apply → destroy; plan selalu dibaca sebelum apply.
  • Resource, variable, dan module adalah blok penyusun; referensi antar-resource diurus Terraform.
  • Remote state wajib — disimpan di object storage dengan locking, tidak pernah di-commit.
  • Satu kode bisa membangun banyak environment hanya dengan variabel berbeda.

Di episode 8 selanjutnya kita akan membahas CLI & automation — mendalami AWS CLI, gcloud, dan az, memakai jq untuk mengolah output JSON, menulis script bash dan Python dengan SDK (boto3), hingga mengotomasi manajemen resource cloud. Sampai jumpa di episode 8!

Belajar Cloud Engineer - Terraform untuk Cloud | Belajar Cloud Engineer