Terraform #
Dalam dunia cloud modern, serverless dan Infrastructure as Code (IaC) adalah dua konsep yang hampir tidak terpisahkan. Serverless menawarkan abstraksi tinggi terhadap infrastruktur, sementara IaC memastikan pengelolaan resource yang konsisten, dapat direproduksi, dan terkontrol. Di ekosistem AWS, Terraform menjadi salah satu tool IaC paling populer untuk membangun dan mengelola arsitektur serverless secara deklaratif.
Artikel ini akan membahas secara mendetail dan praktis bagaimana Terraform digunakan dalam konteks serverless di AWS, mulai dari konsep dasar, komponen utama, contoh arsitektur, hingga best practice dan anti-pattern yang sering terjadi.
Mengapa Terraform untuk Serverless AWS? #
Walaupun AWS menyediakan CloudFormation dan SAM, Terraform tetap banyak dipilih karena:
- Cloud-agnostic – Satu tool untuk multi-cloud dan hybrid
- State management – Terraform state memudahkan tracking perubahan resource
- Modular & reusable – Cocok untuk skala besar dan multi-environment
- Ekosistem provider yang luas – Tidak hanya AWS
- Deklaratif dan konsisten – Mengurangi human error
Dalam konteks serverless, Terraform sangat cocok karena:
- Resource serverless jumlahnya banyak (Lambda, API Gateway, IAM, SQS, SNS, dll)
- Dependency antar resource cukup kompleks
- Deployment perlu konsisten antar environment (dev, staging, prod)
Komponen Serverless AWS yang Umum Dikelola dengan Terraform #
AWS Lambda #
Lambda adalah inti dari arsitektur serverless.
Dengan Terraform, kita bisa mengelola:
- Function
- Runtime (Go, Node.js, Python, dll)
- Memory & timeout
- Environment variables
- IAM execution role
- Versioning & alias
Terraform memungkinkan Lambda didefinisikan sebagai resource deklaratif, bukan sekadar script deploy.
API Gateway (REST / HTTP) #
API Gateway sering digunakan sebagai entry point ke Lambda.
Terraform dapat mengatur:
- API definition
- Route & method
- Integration ke Lambda
- Stage & deployment
- Throttling & logging
Kelebihannya: seluruh konfigurasi API terdokumentasi dalam kode.
IAM (Role & Policy) #
Serverless sangat bergantung pada IAM.
Terraform membantu:
- Membuat IAM Role khusus per Lambda
- Least privilege policy
- Reusable IAM module
Ini penting untuk keamanan dan audit.
Event Source (SQS, SNS, EventBridge, S3) #
Terraform sangat kuat untuk event-driven architecture:
- SQS → Lambda
- SNS → Lambda
- EventBridge rule → Lambda
- S3 event notification → Lambda
Dependency antar resource bisa diatur secara eksplisit.
Observability (CloudWatch) #
Terraform juga bisa mengatur:
- Log group
- Retention policy
- Metric alarm
- Dashboard
Observability sering terlupakan jika tidak dideklarasikan sejak awal.
Contoh Arsitektur Serverless #
Use case sederhana: API → Lambda → DynamoDB
Alur:
- API Gateway menerima request
- API Gateway invoke Lambda
- Lambda baca/tulis ke DynamoDB
- Log masuk ke CloudWatch
Dengan Terraform:
- Semua resource didefinisikan dalam satu repositori
- Dependency otomatis terkelola
- Mudah direplikasi ke environment lain
Struktur Project untuk Serverless #
Struktur yang umum digunakan:
modules/lambda/api_gateway/iam/
envs/dev/staging/prod/
Pendekatan ini membantu:
- Reusability
- Isolasi environment
- Governance yang lebih rapi
Terraform State dalam Serverless #
Tantangan #
Serverless sering memiliki:
- Banyak resource kecil
- Banyak environment
Tanpa state yang baik, akan mudah terjadi:
- Resource drift
- Duplicate resource
- Kesalahan deployment
Best Practice #
- Gunakan remote backend (S3 + DynamoDB lock)
- Pisahkan state per environment
- Jangan commit state ke Git
Workflow Deployment Serverless #
- Developer mengubah kode Terraform
terraform planuntuk review perubahanterraform applyvia CI/CD- Lambda code di-package (zip / container image)
- Versioning Lambda tercatat
Terraform cocok digabungkan dengan:
- GitHub Actions
- GitLab CI
- AWS CodePipeline
Terraform vs SAM #
Kelebihan Terraform #
- Lebih fleksibel
- Tidak hanya fokus Lambda
- Cocok untuk arsitektur kompleks
Kekurangan Terraform #
- Tidak spesifik serverless
- Packaging Lambda perlu tool tambahan
- Learning curve lebih tinggi
Terraform sering dipakai untuk foundation, sementara tool lain untuk application-level deployment.
Anti-Pattern yang Perlu Dihindari #
- Satu Terraform project untuk semua Lambda
- IAM policy terlalu permisif
- Tidak menggunakan remote state
- Mengelola secret langsung di Terraform
- Menggabungkan build logic di Terraform
Kapan Sangat Cocok untuk Serverless? #
Terraform ideal jika:
- Arsitektur serverless cukup kompleks
- Banyak environment
- Butuh governance & audit
- Infrastruktur berkembang seiring waktu
Kurang cocok jika:
- Proyek sangat kecil
- Fokus hanya satu Lambda sederhana
Best Practice #
- Gunakan module untuk Lambda & API Gateway
- Pisahkan infra dan app config
- Least privilege IAM
- Gunakan tagging konsisten
- Enable logging & monitoring sejak awal
- Gunakan versioning Lambda + alias
- Terraform hanya untuk infra, bukan runtime config dinamis
Penutup #
Terraform memberikan kontrol, konsistensi, dan skalabilitas dalam membangun arsitektur serverless di AWS. Walaupun serverless sering dianggap “tanpa infrastruktur”, pada kenyataannya pengelolaan resource justru semakin kompleks—dan di sinilah Terraform berperan penting.
Dengan pendekatan modular, state management yang baik, dan best practice yang tepat, Terraform dapat menjadi fondasi kuat untuk serverless architecture yang robust, aman, dan siap berkembang.