Terraform #
Dalam beberapa tahun terakhir, arsitektur serverless menjadi pilihan utama dalam membangun sistem modern karena kemampuannya untuk menghilangkan kebutuhan pengelolaan server secara langsung. Developer tidak lagi memikirkan provisioning VM, scaling manual, ataupun patching OS. Semua itu ditangani oleh cloud provider.
Di Google Cloud Platform (GCP), serverless bukan hanya sekadar Cloud Functions, melainkan sebuah ekosistem layanan seperti Cloud Run, Cloud Functions, App Engine, Pub/Sub, Eventarc, Workflows, hingga Firestore. Ketika jumlah layanan ini bertambah, kompleksitas pengelolaan konfigurasi, IAM, dependency antar resource, dan environment (dev/staging/prod) juga meningkat.
Di sinilah Terraform berperan penting sebagai fondasi Infrastructure as Code (IaC) untuk arsitektur serverless di GCP.
Apa Itu Terraform? #
Terraform adalah tool Infrastructure as Code (IaC) open-source dari HashiCorp yang memungkinkan kita mendefinisikan, memprovisioning, dan mengelola infrastruktur cloud menggunakan konfigurasi deklaratif.
Alih-alih membuat resource secara manual melalui Google Cloud Console, Terraform memungkinkan semua infrastruktur didefinisikan sebagai kode (.tf) yang:
- Dapat di-versioning menggunakan Git
- Dapat di-review melalui pull request
- Dapat direproduksi secara konsisten
Dalam konteks serverless GCP, Terraform bertindak sebagai single source of truth untuk seluruh resource serverless.
Mengapa Terraform Sangat Relevan untuk Serverless di GCP? #
Walaupun serverless menghilangkan pengelolaan server, infrastruktur tetap ada dan sering kali justru lebih tersebar.
Contoh realitas di lapangan:
- 1 Cloud Run service
- 3 Cloud Functions
- 5 Pub/Sub topics dan subscription
- Eventarc triggers
- IAM bindings
- Secret Manager
- Cloud Scheduler
Tanpa IaC, konfigurasi ini:
- Sulit direplikasi antar environment
- Rentan human error
- Sulit diaudit
Terraform memberikan:
- Konsistensi environment – Dev, staging, dan prod identik secara konfigurasi
- Automation – Provisioning end-to-end tanpa klik manual
- Auditability – Perubahan infrastruktur dapat dilacak
- Scalability – Mudah menambah service baru tanpa chaos
Konsep Dasar Terraform #
Provider #
Provider adalah plugin yang memungkinkan Terraform berinteraksi dengan GCP.
provider "google" {
project = var.project_id
region = var.region
}
Resource #
Resource merepresentasikan layanan cloud yang ingin dibuat.
resource "google_pubsub_topic" "events" {
name = "events-topic"
}
Variable #
Digunakan untuk membuat konfigurasi fleksibel dan reusable.
variable "region" {
type = string
default = "asia-southeast2"
}
State #
Terraform menyimpan state untuk mengetahui resource apa saja yang sudah dibuat. Pada GCP, best practice adalah menyimpan state di Google Cloud Storage.
Layanan Serverless yang Dikelola #
Cloud Functions #
Digunakan untuk workload event-driven ringan.
Terraform dapat mengatur:
- Runtime
- Entry point
- Trigger (HTTP, Pub/Sub, Storage)
- Memory dan timeout
resource "google_cloudfunctions_function" "function" {
name = "process-event"
runtime = "nodejs20"
entry_point = "handler"
trigger_http = true
}
Cloud Run #
Cloud Run menjalankan container secara serverless.
Terraform dapat mengatur:
- Image container
- CPU & memory
- Environment variable
- Traffic splitting
resource "google_cloud_run_service" "api" {
name = "api-service"
location = var.region
template {
spec {
containers {
image = var.image
}
}
}
}
Pub/Sub #
Fondasi utama event-driven architecture di GCP.
Terraform dapat mengatur:
- Topic
- Subscription
- Push atau pull delivery
- Dead Letter Topic
Eventarc #
Menghubungkan event dari berbagai sumber ke Cloud Run atau Cloud Functions.
Terraform mempermudah pengelolaan trigger event tanpa konfigurasi manual.
Workflows #
Digunakan untuk orkestrasi serverless.
Terraform memungkinkan versioning workflow YAML dan deployment otomatis.
Manajemen IAM dalam Serverless #
Salah satu tantangan terbesar di serverless adalah IAM.
Terraform memungkinkan:
- Prinsip least privilege
- Role assignment yang eksplisit
- Audit permission yang jelas
resource "google_project_iam_member" "run_invoker" {
role = "roles/run.invoker"
member = "serviceAccount:${var.sa_email}"
}
Struktur Folder Terraform #
terraform/
├── modules/
│ ├── cloud-run/
│ ├── cloud-function/
│ ├── pubsub/
│ └── iam/
├── envs/
│ ├── dev/
│ ├── staging/
│ └── prod/
Pendekatan ini memudahkan scaling tim dan menjaga konsistensi.
Terraform + CI/CD dalam Serverless GCP #
Terraform sangat ideal dipadukan dengan CI/CD:
Alur umum:
- Build container / function
- Push artifact
- Terraform plan
- Terraform apply
Hal ini memastikan setiap perubahan serverless terkontrol dan dapat di-rollback.
Monitoring dan Observability #
Walaupun Terraform tidak melakukan monitoring langsung, ia dapat memprovision:
- Cloud Monitoring alert
- Log-based metrics
- Error reporting
Semua observability resource dapat dikelola sebagai kode.
Kelebihan dan Kekurangan #
Kelebihan:
- Reproducible infrastructure
- Cocok untuk sistem kompleks
- Mendukung multi-environment
Kekurangan:
- Learning curve awal
- State management harus hati-hati
- Tidak ideal untuk eksperimen cepat
Kapan Sangat Direkomendasikan? #
Terraform sangat direkomendasikan ketika:
- Sistem berbasis event-driven
- Banyak Cloud Run / Functions
- Multi environment
- Tim lebih dari 1 orang
Penutup #
Terraform bukan sekadar tool provisioning, melainkan fondasi arsitektur serverless yang scalable dan maintainable di GCP. Dengan Terraform, serverless tidak hanya mudah dijalankan, tetapi juga mudah dikontrol, diaudit, dan dikembangkan dalam jangka panjang.
Jika serverless adalah masa depan, maka Terraform adalah peta jalannya.