Project: Lambda, API Gateway आणि DynamoDB ने Serverless App बनवा (Source Code)
हा project मालिका जोडतो: student Notes to-do app. Front end S3 + CloudFront (static hosting), API API Gateway + Lambda (API lab), data DynamoDB (CRUD). Source zip download, click-by-click deploy, test, मग cleanup.
या chapter मध्ये तुम्ही काय शिकाल
- छोट्या serverless app ची architecture
- DynamoDB table आणि IAM सह Lambda
- HTTP API routes जोडा
- UI S3 + CloudFront वर
- End to end test आणि cleanup
1. तुम्ही काय बनवाल
Single-page Notes app: list, add, delete. Lab मध्ये login नाही (नंतर Cognito). Primary backend Node.js Lambda; zip मध्ये Python twin पण.
Download: serverless-notes-app.zip — public/, lambda/index.mjs, lambda/handler.py, README.md, sample IAM policy.
2. Architecture चे भाग
| Piece | AWS service | का |
|---|---|---|
| Static UI | S3 + CloudFront | स्वस्त जगभर HTTPS; server नाही |
| HTTP API | API Gateway HTTP API | Routes, CORS, TLS URL |
| Logic | Lambda (Node 20.x) | फक्त requests वर चालते |
| Data | DynamoDB on-demand | Keyed notes; प्रति request |
3. Lab: click by click deploy
कसं करायचं (step by step)
Region ap-south-1. yourname बदला. Free tier लक्षात ठेवा.
A. DynamoDB table
- Table
yourname-notes. PK:noteId(String). On-demand. Sort key नाही. - Active होईपर्यंत थांबा.
B. Lambda साठी IAM role
- IAM → Roles → Create → AWS service → Lambda.
AWSLambdaBasicExecutionRoleattach. Nameyourname-notes-lambda-role.- Role → Add permissions → Create inline policy → JSON:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["dynamodb:PutItem","dynamodb:GetItem","dynamodb:DeleteItem","dynamodb:Scan"],
"Resource": "arn:aws:dynamodb:ap-south-1:ACCOUNT_ID:table/yourname-notes"
}]
}
ACCOUNT_ID आणि table name बदला. Scan का: lab मध्ये सगळ्या notes list (शेकडा items ठीक). Production मध्ये userId PK + Query.
C. Lambda function
- Function
yourname-notes-api, Node.js 20.x, existing role. - Zip मधला
lambda/index.mjseditor मध्ये (किंवा root ला index.mjs zip upload). Handler:index.handler. - Environment:
TABLE_NAME=yourname-notes. - Memory 256 MB, Timeout 10 s. Deploy.
D. HTTP API
- HTTP API
yourname-notes-http→ Lambda integrate. - Routes: GET/POST /notes, DELETE /notes/{id}.
- CORS: origin
*, methods GET,POST,DELETE,OPTIONS. - Create. Invoke URL =
API_BASE. - Test: GET [] ; मग POST.
curl -s -X POST "$API_BASE/notes" -H 'content-type: application/json' -d '{"text":"Finish Lambda chapter"}'
curl -s "$API_BASE/notes"
E. Front end S3 + CloudFront
public/app.jsमध्येAPI_BASEसेट.- Bucket
yourname-notes-web, Block Public Access on. - public/ मधली files upload.
- CloudFront: bucket origin, OAC, HTTP→HTTPS, default root
index.html. Bucket policy paste. - CloudFront URL उघडा → note add → refresh → delete. Network 200.
F. Optional Python twin
दुसरी function handler.py सह, तोच env/role, compare करण्यासाठी route.
Cleanup (हे करा)
- CloudFront disable मग delete (काही minutes).
- S3 website bucket empty + delete.
- HTTP API आणि Lambda delete.
- DynamoDB table आणि IAM role delete.
- Billing मध्ये छोटे/free-tier charges Confirm.
4. या project वरून interview
प्र. UI साठी S3 पुढे CloudFront का?
HTTPS, caching, OAC ने private bucket, जगभर जलद.
प्र. इथे HTTP API का, REST नाही?
Lab ला keys/WAF नको; HTTP API स्वस्त आणि Lambda proxy+CORS पुरेसं.
प्र. Lab मध्ये Scan ठीक, production list मध्ये नाही का?
Lab मध्ये थोडी items. Production ला userId PK + Query.
प्र. Login कसं?
Cognito user pool + HTTP API वर JWT authorizer; प्रत्येक note वर userId.
प्र. Cleanup काय आणि का?
CDN, bucket, API, Lambda, table, role — idle पण खर्च/गोंधळ.
घरी करून बघा
- Lambda मध्ये PUT /notes/{id} आणि UI edit button.
- DynamoDB Streams on करून दुसरी Lambda प्रत्येक change log करेल.
थोडक्यात सांगायचं तर
- Serverless notes = S3/CloudFront + API Gateway + Lambda + DynamoDB.
- एक table साठी IAM least privilege.
- CORS आणि API_BASE browser ला API शी जोडतात.
- Lab resources नेहमी cleanup.
सराव Tasks
Pandharpur Yatra Tours हा पंढरपूर मधला प्रवास व्यवसाय आहे. Vitthal More त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 12
सोपं Functions ची list
का: या Region मध्ये कोणते functions आहेत ते पाहा.
काय करायचं: ap-south-1 मधले Lambda functions दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Function invoke करा
का: Invoke function आत्ता चालवतो व उत्तर file मध्ये ठेवतो.
काय करायचं: pandharpuryatra-orders-fn invoke करा व response out.json मध्ये ठेवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Lambda role साठी trust policy
का: Trust policy role कोण घेऊ शकतो ते सांगते.
काय करायचं: lambda.amazonaws.com ला role assume करू देणारी trust policy लिहा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम Item टाका
का: DynamoDB JSON प्रत्येक value चा type दाखवतो: S string, N number.
काय करायचं: pandharpuryatra-orders मध्ये orderId "o-101" (string) व amount 2500 (number) असलेला item टाका.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Timeout व memory बदला
का: जास्त memory म्हणजे जास्त CPU; timeout अडकलेले runs थांबवतो.
काय करायचं: pandharpuryatra-orders-fn चा timeout 30 seconds व memory 512 MB करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Function ला logs लिहू द्या
का: या actions शिवाय Lambda logs CloudWatch मध्ये दिसत नाहीत.
काय करायचं: फक्त arn:aws:logs:*:*:* वर logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents allow करा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
अवघड S3 ला function call करू द्या
का: S3 function invoke करण्याआधी resource-based permission लागते.
काय करायचं: pandharpuryatra-orders-fn ला s3invoke permission statement द्या: s3.amazonaws.com ने bucket arn:aws:s3:::pandharpuryatra-uploads कडून lambda:InvokeFunction करावं.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Lambda साठी HTTP API quick-create
का: Quick create HTTP API, default route व stage बनवतो.
काय करायचं: pandharpuryatra-api नावाची HTTP API बनवा जिचा target arn:aws:lambda:ap-south-1:128642229481:function:pandharpuryatra-orders-fn.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Lambda function बनवा
का: Lambda ला code zip, runtime, handler नाव व execution role लागतो.
काय करायचं: pandharpuryatra-orders-fn function बनवा: runtime python3.12, handler app.handler, role arn:aws:iam::128642229481:role/lambda-basic, code function.zip मध्ये.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Environment variables द्या
का: Table नावांसारख्या settings code बाहेर ठेवा.
काय करायचं: pandharpuryatra-orders-fn वर environment variable TABLE=pandharpuryatra-orders द्या.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड JSON payload सह invoke करा
का: CLI v2 मध्ये raw JSON साठी --cli-binary-format raw-in-base64-out लागतो.
काय करायचं: pandharpuryatra-orders-fn ला payload {"orderId":"o-101"} (raw JSON) सह invoke करा व उत्तर out.json मध्ये.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Lambda GB-seconds
का: Lambda memory × time bill करतो.
काय करायचं: 1,000,000 invocations, 512 MB, प्रत्येकी 200 ms. किती GB-seconds?
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.










अजून cards: Ravi Sir's Cards.