Loop development serverless penuh di Floci: hot-reload handler Lambda, invoke dengan payload sample, debug breakpoint, log streaming — plus interoperabilitas SAM CLI dan tooling serverless framework saat relevan

Kualitas hidup developer serverless ditentukan oleh satu hal: kecepatan loop — ubah kode, lihat hasil, ulangi. Di AWS sungguhan loop ini berdetak menit (deploy + invoke + baca log CloudWatch). Dengan Floci, seluruh siklus API Gateway → Lambda → DynamoDB dari episode sebelumnya bisa diputar dalam hitungan detik tanpa keluar laptop.
Episode ini merakit loop itu: hot-reload handler, payload sample, debugging, dan log streaming.
Floci membaca kode handler saat fungsi di-update. Pola watch-and-update sederhana:
#!/usr/bin/env bash
# watch.sh - rezip + update tiap file handler berubah
set -euo pipefail
export AWS_ENDPOINT_URL=http://localhost:4566
fswatch -o src/handler.py | while read; do
(cd src && zip -q -j ../handler.zip handler.py)
aws lambda update-function-code \
--function-name orders-api --zip-file fileb://handler.zip >/dev/null \
&& echo "[$(date +%T)] handler ter-update"
doneAlternatif tanpa tool tambahan: find src -name 'handler.py' | entr -s '...' (Unix), atau watcher bawaan IDE. Kuncinya satu: update zip → update-function-code, dua perintah yang sama seperti deploy produksi.
Simpan payload realistis sebagai file dan jadikan kontrak:
cat > events/create-order.json <<'EOF'
{"httpMethod":"POST","path":"/orders",
"body":"{\"item\":\"buku\",\"qty\":2}"}
EOF
aws --endpoint-url=http://localhost:4566 lambda invoke \
--function-name orders-api \
--payload file://events/create-order.json out.json && cat out.jsonUntuk debugging interaktif pada runtime Python, pasang debugger langsung di handler:
import debugpy
def handler(event, context):
debugpy.listen(("0.0.0.0", 5678)) # hanya di mode lokal!
debugpy.wait_for_client() # VS Code attach ke port 5678
...# layer/dependency debugpy disertakan saat zip lokal,
# lalu invoke -> VS Code "Python: Attach" -> breakpoint menyala di laptop kalianWarning
Jangan pernah commit baris debugpy ke branch produksi — gunakan flag env lokal atau pre-commit hook untuk memisahkan kode debug dari kode deployment.
Arsitektur single-process floci membuat semua log terpusat:
docker compose logs -f floci | grep --line-buffered orders-api
# setiap print() handler dan jejak request muncul real-timePertanyaan umum: bisakah sam local atau plugin serverless framework memakai floci sebagai backend? Prinsipnya:
Keputusan pragmatis: mulai dari loop native floci; adopsi tool eksternal hanya bila repo kalian sudah mengandalkannya untuk build/packaging.
Target outline: iterasi fitur serverless penuh (API GW → Lambda → DynamoDB) tanpa keluar laptop.
set -euo pipefail
export AWS_ENDPOINT_URL=http://localhost:4566
aws dynamodb create-table --table-name dev-orders \
--attribute-definitions AttributeName=pk,AttributeType=S \
--key-schema AttributeName=pk,KeyType=HASH \
--billing-mode PAY_PER_REQUEST >/dev/null
(cd api && zip -q ../api.zip handler.py)
aws lambda create-function --function-name orders-api \
--runtime python3.12 --handler handler.handler --zip-file fileb://api.zip \
--role arn:aws:iam::000000000000:role/dummy >/dev/null
aws apigatewayv2 create-api --name orders-dev --protocol-type HTTP \
--target arn:aws:lambda:us-east-1:000000000000:function:orders-api >/dev/null
echo "stack dev siap"Hitung sendiri waktunya: siklus edit→deploy→test→verifikasi data di atas berlangsung di bawah lima detik — bandingkan dengan menit-an loop cloud tradisional.
Rangkuman episode ini:
update-function-code; payload sample sebagai kontrak test manual.FASE 4 tuntas! Episode 24 masuk FASE 5: performance tuning & resource budgeting — angka kunci 24 ms/13 MiB/90 MB, optimasi JVM & storage, dan keamanan docker.sock. Sampai jumpa!