Infrastruktur yang dibangun manual tidak bisa di-review, di-rollback, atau diaudit. Episode ini membahas Terraform/OpenTofu sebagai fondasi IaC, policy-as-code untuk menegakkan kepatuhan, dan GitOps sebagai model delivery yang menjadikan git sebagai source of truth

Sejauh ini kita membangun arsitektur di atas keputusan desain — tapi bagaimana keputusan itu dieksekusi secara konsisten? Jika infrastruktur dibangun manual lewat dashboard, setiap klik adalah titik yang tidak bisa di-review, tidak bisa di-rollback, dan tidak bisa diaudit. Dua insinyur akan menghasilkan dua arsitektur yang berbeda.
Jawabannya adalah Infrastructure-as-Code (IaC): infrastruktur diperlakukan seperti kode — versioned, di-review, di-test, dan di-deploy lewat pipeline. Episode ini membangun arsitektur delivery: Terraform/OpenTofu sebagai fondasi, policy-as-code untuk menegakkan kepatuhan, dan GitOps sebagai cara kerja modern.
Terraform adalah bahasa de facto untuk IaC multi-cloud: satu konfigurasi deskriptif yang bisa menjalankan resource di AWS, GCP, Azure, dan lainnya. Prinsipnya declarative: kalian menyatakan hasil akhir yang diinginkan, Terraform menghitung perubahan dan menerapkannya.
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = { Name = "main-vpc", env = "prod" }
}
resource "aws_subnet" "public_a" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.0.0/24"
availability_zone = "us-east-1a"
tags = { Name = "public-a", env = "prod" }
}Dua hal penting dari contoh di atas: referensi antar-resource (aws_vpc.main.id) yang membuat dependensi diekspresikan secara eksplisit, dan tags yang menghubungkan IaC dengan kebijakan tagging di episode 9.
Terraform punya tiga fase yang membuatnya aman untuk produksi:
terraform plan # hitung perubahan tanpa menerapkan
terraform apply # terapkan perubahan
terraform plan -destroy # rencana penghapusanterraform plan adalah alat review terbaik yang ada: output-nya menunjukkan persis apa yang akan berubah sebelum menyentuh cloud. Di arsitektur yang baik, tidak ada apply tanpa plan yang di-review.
OpenTofu adalah fork open source Terraform (di bawah Lisensi BUSL-1.1) yang kompatibel dengan mayoritas kode Terraform. Bagi organisasi yang menghindari lisensi non-open, ini pilihan yang layak — dengan sintaks yang hampir sama.
IaC membangun infrastruktur; policy-as-code memastikan ia dibangun dengan benar. Prinsipnya: aturan kepatuhan (resource harus punya tag, S3 harus ter-enkripsi, tidak boleh public) ditulis sebagai kode dan dievaluasi otomatis di pipeline.
| Pendekatan | Contoh Tool | Cara Kerja |
|---|---|---|
| Policy saat plan | Sentinel, OPA/Rego | Evaluasi sebelum apply |
| Scan hasil deploy | Checkov, tfsec, Prowler | Scan IaC dan cloud state |
| Drift detection | CloudFormation Drift, Terraform plan | Deteksi perubahan manual |
from checkov.common.models.enums import CheckCategories
from checkov.terraform.checks.resource.base_resource_check import BaseResourceCheck
class S3Encrypted(BaseResourceCheck):
def __init__(self):
name = "S3 bucket harus ter-encrypt"
id = "CUSTOM_S3_ENCRYPT"
supported_resources = ['aws_s3_bucket']
categories = [CheckCategories.ENCRYPTION]
super().__init__(name, id, categories)
def scan_resource_conf(self, conf):
return conf.get('server_side_encryption_configuration') is not NoneEfeknya: kepatuhan menjadi otomatis dan preventif, bukan manual dan reaktif. Arsitek menulis kebijakan sekali, pipeline menegakkannya ribuan kali. Ini menghubungkan IaC dengan tema compliance episode 20.
GitOps menjadikan repository git sebagai single source of truth untuk infrastruktur. Semua perubahan lewat pull request; sebuah controller (operator) menyinkronkan realitas cloud dengan apa yang ada di git. Jika ada perbedaan, controller memperbaiki (atau meng-alert).
Git repo (desired state)
↓ pull
Controller (Argo CD / Flux)
↓ sync
Cloud infrastructure (actual state)Note
Kombinasi Terraform (provisioning) + GitOps (sync/manage) adalah pola paling umum di 2026: Terraform membuat resource, GitOps terus menyelaraskan konfigurasinya dengan git. Keduanya bekerja sama — bukan saling menggantikan.
Merangkai semuanya menjadi satu alur delivery:
Setiap perubahan infrastruktur melewati: kode di git → policy check → plan → review → apply → sinkronisasi. Tidak ada jalan pintas. Ini adalah arsitektur delivery yang bisa diaudit, bisa di-rollback, dan tidak bergantung pada ingatan manusia.
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita akan membahas microservices & event-driven — batas microservices, pola event-driven dengan queue/stream, dan saga pattern. Sampai jumpa di episode 12!