← Semua pembelajaran / AWS untuk AI Engineer
Fase 1 · Serverless & Integrasi

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 urusYang AWS urus
Kode handler dan dependensinyaProvisioning server
Memori, timeout, dan rolePenskalaan naik dan turun
Idempotensi dan penanganan errorKetersediaan lintas AZ
Biaya per pemanggilanPatching sistem operasi dan runtime

Batas yang benar-benar mengubah desain

BatasNilaiKonsekuensinya untuk aplikasi LLM
Timeout15 menitCukup untuk satu percakapan; tidak cukup untuk ingest ribuan dokumen — pecah jadi antrean
Memori128 MB – 10 GBMenaikkan memori juga menaikkan CPU; sering justru lebih murah karena selesai lebih cepat
Payload sinkron6 MB masuk dan keluarJangan lewatkan PDF lewat payload — simpan di S3, kirim kuncinya
Ukuran deployment (zip)50 MB terkompresi, 250 MB teruraiDependensi berat mendorong ke container image (materi berikutnya)
/tmp512 MB – 10 GBRuang kerja sementara untuk unduhan; isinya bisa bertahan antar pemanggilan pada instance yang sama
Concurrency default1.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:

  1. Init — Lambda mengunduh kodemu, menyalakan runtime, lalu menjalankan semua yang ada di luar handler. Ini yang disebut cold start.
  2. Invoke — handler dijalankan. Terjadi berkali-kali pada lingkungan yang sama.
  3. Freeze — proses dibekukan, bukan dimatikan. Variabel global tetap ada.
  4. 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

ModelContoh pemicuKalau gagal
SinkronAPI Gateway, Function URLError dikembalikan ke pemanggil; tidak diulang otomatis
AsinkronEventBridge, S3, SNSDiulang otomatis 2×, lalu masuk dead-letter queue
Poll (event source mapping)SQS, Kinesis, DynamoDB StreamsPesan 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

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.