Project: Lambda, API Gateway आणि DynamoDB ने URL Shortener बनवा (Source Code)
bit.ly / WhatsApp short links: छोटा code मोठा URL उघडतो. API Gateway, Lambda, DynamoDB — Notes project सारखं. Zip, ap-south-1 deploy, redirect test, cleanup.
या chapter मध्ये तुम्ही काय शिकाल
- shortCode PK आणि click counter
- table, IAM, Lambda, HTTP API
- POST /shorten आणि GET redirect
- curl verify आणि cleanup
1. आधी रोजचं उदाहरण
हे का लागतं?
Instagram bio / Flipkart share: मोठा URL नको. Shortener long URL store, 7-char code, visit ला redirect + clicks. EC2 नाही.
हे काय आहे?
HTTP API → Lambda → DynamoDB PK shortCode. POST create. GET 302 + ADD clicks.
Download: url-shortener-app.zip
2. Architecture
| Piece | Service | का |
|---|---|---|
| API | API Gateway HTTP API | HTTPS + CORS |
| Logic | Lambda Python 3.12 | boto3 built-in |
| Data | DynamoDB on-demand | shortCode key |
3. Lab: click by click
कसं करायचं (step by step)
Region ap-south-1. yourname बदला.
A. DynamoDB
- Table
yourname-urls, PKshortCode, on-demand. - Active होईपर्यंत थांबा.
B. IAM role
- Lambda role + basic logs. Name
yourname-urls-role. - Inline: Put/Get/UpdateItem. ACCOUNT_ID बदला.
C. Lambda
- Function Python 3.12.
- handler.py paste. Handler
handler.lambda_handler. - Env TABLE_NAME. 256 MB, 10 s. Deploy.
D. HTTP API
- HTTP API + Lambda.
- Routes POST /shorten, GET /{code}.
- CORS *.
- BASE_URL=API_BASE. Redeploy.
E. Test
curl -s -X POST "$API_BASE/shorten" -H 'content-type: application/json' \
-d '{"url":"https://ravindrabagale.com/aws/"}'
curl -sI "$API_BASE/YOURCODE" | head -5
201 + shortCode, मग 302. clicks ≥ 1.
Cleanup
- API, Lambda, table, role delete.
- Billing confirm.
4. Interview
प्र. 302 का?
Browser Location follow करतो.
प्र. ADD clicks का?
Concurrent ला atomic.
प्र. GetItem vs Scan?
नेहमी GetItem by PK.
प्र. Custom domain?
ACM + API domain / CloudFront.
प्र. Cleanup?
API, Lambda, table, role.
घरी करून बघा
- GET /stats/{code}.
- फक्त https allow.
थोडक्यात सांगायचं तर
- Shortener = HTTP API + Lambda + DynamoDB.
- POST create; GET redirect + count.
- Least privilege.
- Cleanup.
सराव Tasks
Lisboa Tiles हा लिस्बन मधला सिरॅमिक टाइल्स व्यवसाय आहे. João Silva त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे EUR मध्ये मोजले जातात आणि AWS resources eu-west-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 12
सोपं Functions ची list
का: या Region मध्ये कोणते functions आहेत ते पाहा.
काय करायचं: eu-west-1 मधले Lambda functions दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Function invoke करा
का: Invoke function आत्ता चालवतो व उत्तर file मध्ये ठेवतो.
काय करायचं: lisboatiles-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.
काय करायचं: lisboatiles-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 थांबवतो.
काय करायचं: lisboatiles-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 लागते.
काय करायचं: lisboatiles-orders-fn ला s3invoke permission statement द्या: s3.amazonaws.com ने bucket arn:aws:s3:::lisboatiles-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 बनवतो.
काय करायचं: lisboatiles-api नावाची HTTP API बनवा जिचा target arn:aws:lambda:eu-west-1:101273714098:function:lisboatiles-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 लागतो.
काय करायचं: lisboatiles-orders-fn function बनवा: runtime python3.12, handler app.handler, role arn:aws:iam::101273714098: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 बाहेर ठेवा.
काय करायचं: lisboatiles-orders-fn वर environment variable TABLE=lisboatiles-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 लागतो.
काय करायचं: lisboatiles-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.