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:

  1. Cloud-agnostic – Satu tool untuk multi-cloud dan hybrid
  2. State management – Terraform state memudahkan tracking perubahan resource
  3. Modular & reusable – Cocok untuk skala besar dan multi-environment
  4. Ekosistem provider yang luas – Tidak hanya AWS
  5. 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:

  1. API Gateway menerima request
  2. API Gateway invoke Lambda
  3. Lambda baca/tulis ke DynamoDB
  4. 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 #

  1. Developer mengubah kode Terraform
  2. terraform plan untuk review perubahan
  3. terraform apply via CI/CD
  4. Lambda code di-package (zip / container image)
  5. 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 #

  1. Satu Terraform project untuk semua Lambda
  2. IAM policy terlalu permisif
  3. Tidak menggunakan remote state
  4. Mengelola secret langsung di Terraform
  5. 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 #

  1. Gunakan module untuk Lambda & API Gateway
  2. Pisahkan infra dan app config
  3. Least privilege IAM
  4. Gunakan tagging konsisten
  5. Enable logging & monitoring sejak awal
  6. Gunakan versioning Lambda + alias
  7. 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact