Belajar Cloud Computing - Serverless & Function as a Service (FaaS)
Episode 11 of 21

Belajar Cloud Computing - Serverless & Function as a Service (FaaS)

Membangun aplikasi tanpa memikirkan server: arsitektur serverless dengan scale-to-zero, bersifat event-driven, dan tagihan per eksekusi dalam milidetik. Episode ini membahas pemicu event, contoh fungsi Node.js untuk Lambda, serta perbandingan Lambda, Cloud Functions, Cloud Run, dan Azure Functions.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 10 kita belajar menyimpan data non-relasional dan mempercepatnya dengan cache. Namun semua itu tetap berjalan di atas server yang harus kalian hitung kapasitasnya, jaga uptime-nya, dan patchnya. Bagaimana jika seluruh pekerjaan itu dihilangkan — kalian cukup menulis kode, dan cloud menangani sisanya?

Episode 11 ini membuka paradigma serverless: arsitektur di mana server tidak lagi menjadi unit yang kalian pikirkan. Kita akan membahas prinsip scale-to-zero dan pay-per-execution, event-driven architecture, jenis pemicu event, contoh fungsi Lambda dalam Node.js, cara deploy-nya lewat CLI, serta peta layanan FaaS di AWS, GCP, dan Azure.

Serverless: Server yang Tak Terlihat

Nama "serverless" menyesatkan — server tetap ada, hanya saja tidak lagi menjadi tanggung jawab kalian. Provider menyediakan lingkungan eksekusi yang tersembunyi di balik layar, dan kalian hanya berinteraksi dengan dua hal: kode fungsi dan event yang memicunya.

Tiga sifat yang membedakan serverless dari semua yang kita bahas sebelumnya:

  • Scale-to-zero: saat tidak ada event, tidak ada fungsi yang berjalan, dan tidak ada yang dibayar. Instance VM di episode 6 selalu menyala dan selalu ditagih; fungsi serverless bisa "mati total" dan bangun dalam milidetik.
  • Event-driven: fungsi tidak pernah berjalan sendiri. Ia selalu dipicu oleh sesuatu — request HTTP, file baru, perubahan database, atau pesan dalam antrian.
  • Pay-per-execution: tagihan dihitung per eksekusi dan per durasi dalam milidetik. Tidak ada biaya idle seperti VM.

Tip

Analogi terbaiknya adalah ojek online versus menyewa mobil dengan sopir. Menyewa sopir (VM) berarti membayar penuh selama disewa, walau mobil menganggur. Serverless seperti memesan ojek hanya saat butuh: datang cepat saat dipanggil, pergi saat selesai, dan membayar hanya untuk jarak yang ditempuh. Jika traffic kalian sporadis — kadang ramai, kadang sepi — ojek jauh lebih hemat; jika melayani traffic konstan, sopir pribadi bisa lebih murah.

Karakteristik FaaS

FaaS adalah bentuk serverless yang paling murni: satu fungsi, satu respons, tanpa server yang terlihat. Ada dua sifat teknis yang wajib kalian pahami sejak awal:

  • Stateless: fungsi tidak boleh menyimpan state di memori antara satu eksekusi dan eksekusi berikutnya — instance fungsi bisa di-destroy kapan saja. State yang perlu bertahan harus disimpan di luar: database, object storage, atau cache.
  • Cold start: saat fungsi sudah lama tidak dipanggil, provider harus menyiapkan environment baru sebelum mengeksekusinya. Pemanasan ini menambah sedikit latensi pada panggilan pertama. Untuk aplikasi yang sangat sensitif terhadap latensi, kalian bisa memakai provisioned concurrency — beberapa instance selalu hangat, dengan biaya tambahan.

Important

Sifat stateless inilah yang paling sering mengganggu developer baru. Jangan pernah menyimpan sesi pengguna, file sementara, atau variabel global yang berubah-ubah di dalam fungsi serverless. Jika kalian butuh data yang bertahan antar eksekusi, simpan di luar — inilah alasan kenapa episode 9 dan 10 (database dan cache) adalah prasyarat alami sebelum terjun ke serverless.

Event Triggers: Yang Membangunkan Fungsi

Fungsi serverless tidak punya tombol on — ia bangun hanya ketika event tiba. Empat pola pemicu yang paling umum:

PemicuContohAlur
HTTP APIREST endpointBrowser memanggil URL, fungsi mengeksekusi dan membalas
File baruObject storagePengguna upload file, fungsi memprosesnya (resize, scan)
Perubahan databaseStream atau CDCBaris baru ditulis, fungsi merespons (notifikasi, agregasi)
Pesan antrianQueue atau topicService A mengirim pesan, service B memprosesnya asinkron

Bayangkan sistem pengelolaan foto: pengguna mengupload gambar (event file), fungsi dipicu untuk membuat thumbnail lalu menyimpannya, kemudian mengirim pesan ke antrian, yang memicu fungsi lain untuk mengirim notifikasi. Tidak ada server yang berjalan terus-menerus — seluruh pipeline bangun hanya saat diperlukan.

Note

Satu prinsip arsitektur yang baik: jadikan setiap fungsi mengerjakan satu hal saja. Fungsi yang menangani thumbnail, resize, dan notifikasi sekaligus akan sulit diuji, sulit diskalakan, dan membayar lebih. Kecil, fokus, dan tidak saling berbagi state — inilah gaya yang direkomendasikan seluruh provider.

Contoh Fungsi Lambda dalam Node.js

Fungsi Lambda mengekspor sebuah handler. Contoh berikut menerima request HTTP, mengambil parameter nama, dan mengembalikan JSON:

handler.js - fungsi Lambda Node.js
export const handler = async (event) => {
  const name = event.queryStringParameters?.name ?? "dunia";
 
  return {
    statusCode: 200,
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      message: `Halo, ${name}!`
    })
  };
};

Perhatikan struktur event yang masuk: untuk pemicu HTTP, ia membawa method, path, header, query string, dan body. Pemicu yang berbeda membentuk event yang berbeda pula — event dari file upload berisi nama bucket dan object, event dari antrian berisi daftar pesan. Satu fungsi yang sama bisa dipasang ke berbagai pemicu.

Setelah handler siap, fungsi dibuat lewat aws lambda create-function:

Membuat fungsi Lambda dari zip
aws lambda create-function \
  --function-name hello-cloud \
  --runtime nodejs20.x \
  --role arn:aws:iam::123456789012:role/lambda-basic-execution \
  --handler index.handler \
  --zip-file fileb://handler.zip

Flag pentingnya: --runtime menentukan versi bahasa, --handler index.handler menunjukkan file index.js dengan fungsi bernama handler, --role adalah peran IAM yang memberi izin fungsi untuk berjalan (misalnya membaca tabel DynamoDB), dan --zip-file mengirim kode yang sudah dikemas.

Caution

--role bukan pilihan biasa — ia adalah kunci keamanan. Fungsi Lambda berjalan dengan izin IAM persis seperti VM: jika peran terlalu lebar, fungsi yang terekspos bisa mengakses sumber daya yang tidak seharusnya. Prinsip least privilege di episode 4 berlaku sama di sini — beri peran hanya izin yang benar-benar dibutuhkan fungsi itu.

Komparasi Layanan FaaS Big 3

KebutuhanAWSGCPAzure
Function as a ServiceLambdaCloud FunctionsAzure Functions
Container serverless-Cloud RunAzure Container Apps
Penghitung biayaPer request dan durasi (GB-s)Per request dan durasiPer eksekusi dan durasi

Konsepnya identik antar penyedia: satu fungsi, pemicu event, skala otomatis, dan tagihan per eksekusi. GCP dan Azure juga menawarkan varian menarik: Cloud Run dan Azure Container Apps menjalankan container yang bisa scale-to-zero — semacam jembatan menuju topik episode 12 — tetap menagih per penggunaan tetapi tidak dibatasi bentuk fungsi.

Tip

Pilih antara fungsi dan container serverless berdasarkan kebutuhan: fungsi untuk glue logic, pipeline event, dan API sederhana; container serverless untuk aplikasi lengkap dengan dependency berat atau framework penuh yang tidak nyaman dipaksa masuk ke bentuk fungsi.

Kapan Serverless, Kapan Tidak

Serverless bukan jawaban untuk semua. Pertimbangkan saat yang tepat memakainya:

  • Tepat: workload berdenyut (laporan terjadwal, pemrosesan upload), integrasi event ringan, API sederhana, dan prototipe cepat.
  • Kurang tepat: aplikasi dengan traffic konstan tinggi (VM atau container cenderung lebih murah), workload long-running seperti machine learning training, dan sistem yang sangat sensitif terhadap cold start.

Serverless menggeser kompleksitas dari operasional ke arsitektur. Kalian tidak lagi memikirkan patch dan scaling, tetapi harus berpikir dalam bentuk event, state eksternal, dan batas durasi eksekusi.

Penutup

Pada episode 11 ini kalian telah memahami fondasi serverless: scale-to-zero yang menghentikan eksekusi dan tagihan saat tidak ada event, event-driven architecture dengan empat pola pemicu utama — HTTP API, file upload, perubahan database, dan pesan antrian — serta pay-per-execution yang menghitung biaya per milidetik. Kalian juga melihat contoh fungsi Lambda Node.js dan cara deploy-nya lewat aws lambda create-function, plus peta layanan Lambda, Cloud Functions, dan Azure Functions.

Kunci yang harus dibawa pulang:

  • Fungsi serverless bersifat stateless — semua state disimpan di luar.
  • Pemicu event menentukan bentuk arsitektur — setiap fungsi mengerjakan satu hal.
  • Serverless menghemat untuk traffic berdenyut, bukan untuk beban konstan.

Fungsi serverless ideal untuk potongan logika kecil. Bagaimana jika kalian butuh fleksibilitas penuh atas aplikasi — dependency apa pun, proses jangka panjang, port tersendiri — namun tetap ingin menjalankannya dengan cara yang portable dan skalabel? Episode 12 menjawabnya: Managed Container & Kubernetes Services — standar modern untuk mengemas, mengirim, dan mengatur aplikasi.

Belajar Cloud Computing - Serverless & Function as a Service (FaaS) | Belajar Cloud Computing