AWS Lambda — konsep dasar
Lambda menjalankan fungsimu sebagai respons atas event, dan mematikannya saat selesai. Batas-batasnya bukan detail administratif — ia yang menentukan apa yang boleh kamu taruh di dalamnya.
Intisari
- Kamu menyerahkan fungsi; AWS mengurus server, penskalaan, dan ketersediaan.
- Timeout maksimum 15 menit. Memori 128 MB–10 GB, dan CPU ikut naik bersama memori.
- Payload permintaan sinkron maksimum 6 MB; ini yang mendorong pola "kirim pointer S3, bukan datanya".
- Cold start hanya terjadi saat instance baru dibuat — kode di luar handler dijalankan sekali per instance, bukan per permintaan.
- Concurrency dihitung sebagai permintaan yang berjalan bersamaan; kuota akun bisa habis dan menyebabkan throttle.
Model mentalnya
Lambda bukan "server yang selalu hidup tapi murah". Ia lebih dekat ke fungsi yang dipanggil: sebuah event masuk, AWS menyiapkan lingkungan eksekusi, menjalankan handler-mu, mengembalikan hasil, lalu membekukan lingkungan itu. Kalau tidak ada permintaan lagi, lingkungannya dibuang.
| Yang kamu urus | Yang AWS urus |
|---|---|
| Kode handler dan dependensinya | Provisioning server |
| Memori, timeout, dan role | Penskalaan naik dan turun |
| Idempotensi dan penanganan error | Ketersediaan lintas AZ |
| Biaya per pemanggilan | Patching sistem operasi dan runtime |
Batas yang benar-benar mengubah desain
| Batas | Nilai | Konsekuensinya untuk aplikasi LLM |
|---|---|---|
| Timeout | 15 menit | Cukup untuk satu percakapan; tidak cukup untuk ingest ribuan dokumen — pecah jadi antrean |
| Memori | 128 MB – 10 GB | Menaikkan memori juga menaikkan CPU; sering justru lebih murah karena selesai lebih cepat |
| Payload sinkron | 6 MB masuk dan keluar | Jangan lewatkan PDF lewat payload — simpan di S3, kirim kuncinya |
| Ukuran deployment (zip) | 50 MB terkompresi, 250 MB terurai | Dependensi berat mendorong ke container image (materi berikutnya) |
/tmp | 512 MB – 10 GB | Ruang kerja sementara untuk unduhan; isinya bisa bertahan antar pemanggilan pada instance yang sama |
| Concurrency default | 1.000 per region (bisa dinaikkan) | Dibagi seluruh fungsi di akun — satu fungsi ramai bisa membuat yang lain kena throttle |
Siklus hidup dan cold start
Pemahaman ini yang membedakan kode Lambda yang cepat dari yang lambat:
- Init — Lambda mengunduh kodemu, menyalakan runtime, lalu menjalankan semua yang ada di luar handler. Ini yang disebut cold start.
- Invoke — handler dijalankan. Terjadi berkali-kali pada lingkungan yang sama.
- Freeze — proses dibekukan, bukan dimatikan. Variabel global tetap ada.
- Shutdown — setelah cukup lama menganggur, lingkungannya dibuang.
import boto3
# Init — dijalankan SEKALI per lingkungan eksekusi.
# Membuat client di sini menghemat ~100 ms pada setiap pemanggilan berikutnya.
bedrock = boto3.client("bedrock-runtime")
def handler(event, context):
# Invoke — dijalankan setiap permintaan.
return bedrock.converse(...)
Konsekuensi yang sering menggigit: karena lingkungan dipakai ulang, state global bocor antar permintaan. Cache yang kamu simpan di variabel modul bisa terbawa ke pengguna berikutnya. Untuk data per-permintaan, jangan pernah simpan di luar handler.
Cara Lambda dipanggil
| Model | Contoh pemicu | Kalau gagal |
|---|---|---|
| Sinkron | API Gateway, Function URL | Error dikembalikan ke pemanggil; tidak diulang otomatis |
| Asinkron | EventBridge, S3, SNS | Diulang otomatis 2×, lalu masuk dead-letter queue |
| Poll (event source mapping) | SQS, Kinesis, DynamoDB Streams | Pesan kembali ke antrean sampai batas percobaan |
Perbedaan ini penting untuk pemanggilan LLM: model asinkron dan poll mengulang pemanggilan. Kalau handler-mu memanggil Bedrock lalu menulis ke database, percobaan ulang berarti biaya token dibayar dua kali dan datanya bisa dobel. Karena itu handler yang menyentuh model harus dirancang idempoten — biasanya dengan kunci idempotensi yang diturunkan dari ID pesan.
Kapan Lambda bukan jawabannya
Pilih yang lain kalau…
| Proses > 15 menit | Step Functions, ECS Fargate, atau Batch |
| Butuh koneksi WebSocket panjang | API Gateway WebSocket + Lambda per pesan, atau ECS |
| Butuh GPU | SageMaker atau ECS/EKS |
| Beban stabil dan tinggi 24/7 | Fargate biasanya lebih murah |
Latihan: buat satu fungsi Lambda Python yang memanggil sts:GetCallerIdentity dan
mengembalikan ARN-nya, pakai role BelajarBedrockRole dari Fase 0 (tambahkan izin
sts:GetCallerIdentity). Jalankan dua kali berturut-turut dan bandingkan Init duration di
log — hanya pemanggilan pertama yang punya angka itu.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.