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.

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".
Infrastruktur sebagai kode memberi tiga hal yang tidak bisa diberikan dashboard:
Ini juga satu-satunya cara masuk ke proses CI/CD (episode 14): pipeline menjalankan Terraform, bukan manusia yang klik-klik.
Alur kerja Terraform selalu empat langkah:
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 dibuatterraform 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 adalah jembatan Terraform ke platform cloud. AWS, GCP, Azure, dan ratusan lainnya masing-masing punya provider resmi. Konfigurasi di blok terraform:
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 adalah objek cloud yang dikelola Terraform. Contoh membuat security group dan instance (dari episode 5, tapi sekarang dalam kode):
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.
Variabel membuat kode bisa dipakai ulang lintas environment:
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 (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.
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.
terraform {
backend "gcs" {
bucket = "lab-tf-state"
prefix = "terraform/state"
}
}Aturan praktis industri:
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:
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:
terraform init
terraform plan
terraform apply -auto-approve
terraform show | head -30Jika 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.
terraform plan — langsung apply tanpa melihat diff. Aturan: tidak pernah apply tanpa plan yang sudah dibaca.main.tf. Pakai variabel dan secret manager.Inti yang harus dibawa pulang:
init → plan → apply → destroy; plan selalu dibaca sebelum apply.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!