⚡ धडा 19 — Lambda: फक्त बोलावल्यावरच अस्तित्वात असणारा मदतनीस (serverless functions)
📍 तुम्ही इथे आहात: 20 पैकी धडा 19 · मागील: lesson-18-cloudwatch · पुढील: lesson-20-the-bill
📦 या ब्रँचमध्ये काय आहे
धडे 01–19. Code चालवण्याचा दुसरा मार्ग — बाकच नाही. खरी file:
- lambda/hello.py — संपूर्ण "server"
🧒 5 वर्षांच्या मुलाला समजावल्यासारखे
बाक भाड्याने घेणे (EC2) म्हणजे बाक रिकामा बसलेला असतानाही पैसे भरणे. पण काही कामे म्हणजे छोटी कामे असतात: फोटो upload झाला की त्याचा आकार बदला, मध्यरात्री एक अहवाल चालवा. अशा कामांसाठी शाळेकडे एक जादुई बोलावल्यावर येणारा मदतनीस ⚡ आहे: Lambda.
- एक event घडतो 🔔 — locker room मध्ये एक डबा येतो (S3 upload), सकाळची घंटा वाजते (schedule), कोणीतरी URL ला call करते.
- मदतनीस अचानक अस्तित्वात येतो 💨, नेमके ते एकच काम करतो (जास्तीत जास्त 15 मिनिटे), आणि नाहीसा होतो.
- तुम्ही प्रत्येक कामासाठी, प्रति 100 ms पैसे भरता — रिकामा मदतनीस शून्य खर्चाचा. एकदम हजार डबे आले? हजार मदतनीस हजर होतात. Scaling हे तुम्ही configure करायचे feature नाही; "प्रत्येक कामाला एक मदतनीस" याचा अर्थच तो आहे.
दोन प्रामाणिक तळटीपा:
- Cold starts 🥶: बराच वेळ न बोलावलेला मदतनीस काम सुरू करण्याआधी ~100 ms–2 s "बूट घालण्यात" घालवतो. सहसा चालते; latency-critical APIs साठी महत्त्वाचे ठरते.
- मदतनीस IAM टोपी घालतो 🎩 (धडा 04, अर्थातच): त्याचा execution role म्हणजे ते काम नेमके कशाला हात लावू शकते — हा S3 bucket, ती log डायरी, बाकी काही नाही.
🗺️ आकृती
flowchart LR
ev["🔔 events<br/>📦 S3 upload · ⏰ schedule · 🌐 URL"]
fn["⚡ helper appears 💨<br/>runs hello.py<br/>≤ 15 min, per-100ms billing"]
hat["🎩 execution role<br/>may touch: this bucket, logs"]
out["✅ errand done<br/>result → S3 / response"]
gone["👻 …vanishes<br/>idle cost: $0"]
ev -->|"1"| fn
hat -->|"2 worn during"| fn
fn -->|"3"| out
fn -->|"4"| gone
❓ काय
- Function = तुमचा code + runtime (Python/Node/…) + memory size (CPU memory सोबतच वाढतो — एकमेव बटण) + timeout + execution role.
- Triggers सगळीकडे: S3, SQS queues, EventBridge schedules (cluster शिवाय CronJobs — k8s धडा 18 ची घंटा, serverless), ALB target groups (धडा 15 — reception मदतनिसांकडेही पाठवू शकते!), झटपट HTTP साठी function URLs.
- केव्हा नाही: सतत जड traffic (स्थिर भारावर प्रत्येक request ला मदतनीसापेक्षा भाड्याचा बाक स्वस्त), 15 मिनिटांपेक्षा मोठी कामे, खास hardware, किंवा जड दीर्घकाळ चालणारे connections. Scooter/truck चा धडा (08) paradigms लाही लागू होतो.
- Logs: प्रत्येक
printआपोआप CloudWatch डायऱ्यांत (धडा 18) जाते — नाहीशा झालेल्या मदतनीसामध्ये डोकावण्याची तुमची एकमेव खिडकी.
🤔 का
"Code कुठे चालतो" याचे हे तिसरे उत्तर आहे: बाक भाड्याने घ्या (EC2), बाकांची शाळा चालवा (k8s), किंवा कामांचे वर्णन करा (Lambda). खऱ्या systems चे संपूर्ण जोडणी-थर — thumbnails, webhooks, रात्रीची साफसफाई, धडा 12 मधल्या ops scripts — छोटी कामे म्हणून सर्वात स्वस्त आणि सोपे असतात. तिन्ही paradigms (आणि त्यांची bills) माहीत असणे म्हणजेच "architect" असणे.
🔧 कसे
zip fn.zip hello.py
aws lambda create-function --function-name hello --runtime python3.12 \
--handler hello.handler --zip-file fileb://fn.zip --role $HELPER_ROLE_ARN
aws lambda invoke --function-name hello --payload '{"name":"class 3A"}' out.json
cat out.json # {"greeting": "hello, class 3A"}
🧪 करून पाहा (~10 मिनिटे, मोफत — महिन्याला दहा लाख कामे $0)
वरच्या चार commands चालवा (role ची trust policy धडा 04 चीच, शब्दशः —
टोपी कोण घालू शकतो: lambda.amazonaws.com). ते पाच वेळा पटापट invoke
करा; CloudWatch डायरीतल्या REPORT ओळी वाचा — milliseconds मध्ये, एक cold
start आणि चार warm ओळखा.
aws lambda delete-function --function-name hello # tidy, as always
✅ तपासा — तुम्हाला काय दिसायला हवे
aws lambda invoke {"greeting": "hello, class 3A"} लिहितो; CloudWatch log group एक cold Init Duration आणि चार warm invocations दाखवतो.
🧹 साफसफाई — चालू ठेवू नका
aws lambda delete-function --function-name hello — दहा लाख invocations मोफत आहेत, तरीही नीटनेटके ठेवा
⚠️ नेहमीच्या चुका
- 15 मिनिटांची मर्यादा असलेल्या मदतनीसाला 15 मिनिटांचे काम
- Execution role ला
*देणे — टोप्याही least-privilege असतात - Invocations दरम्यान state ची अपेक्षा — मदतनीस विसरतात
⏭️ पुढे
तुम्ही आता बाक, lockers, receptions, कार्यालये आणि मदतनीस भाड्याने घेता. एक कौशल्य उरले, आणि तेच हा छंद परवडणारा ठेवते: मीटर वाचणे. धडा 20 — bill.