Ravindra BagaleCourses & study guides English

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.

Request मार्गClientPOST /shortenAPI GatewayLambdaPutItemClientGET /codeLambdaGetItem + clicks302
Notes API lab सारखंच.

Download: url-shortener-app.zip

2. Architecture

PieceServiceका
APIAPI Gateway HTTP APIHTTPS + CORS
LogicLambda Python 3.12boto3 built-in
DataDynamoDB on-demandshortCode key

3. Lab: click by click

कसं करायचं (step by step)

Region ap-south-1. yourname बदला.

A. DynamoDB

  1. Table yourname-urls, PK shortCode, on-demand.
  2. Active होईपर्यंत थांबा.

B. IAM role

  1. Lambda role + basic logs. Name yourname-urls-role.
  2. Inline: Put/Get/UpdateItem. ACCOUNT_ID बदला.

C. Lambda

  1. Function Python 3.12.
  2. handler.py paste. Handler handler.lambda_handler.
  3. Env TABLE_NAME. 256 MB, 10 s. Deploy.

D. HTTP API

  1. HTTP API + Lambda.
  2. Routes POST /shorten, GET /{code}.
  3. CORS *.
  4. 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

  1. API, Lambda, table, role delete.
  2. 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.

घरी करून बघा

  1. GET /stats/{code}.
  2. फक्त https allow.

थोडक्यात सांगायचं तर

  1. Shortener = HTTP API + Lambda + DynamoDB.
  2. POST create; GET redirect + count.
  3. Least privilege.
  4. Cleanup.

सराव Tasks

या scenario बद्दल

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 दाखवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Function invoke करा

का: Invoke function आत्ता चालवतो व उत्तर file मध्ये ठेवतो.

काय करायचं: lisboatiles-orders-fn invoke करा व response out.json मध्ये ठेवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Lambda role साठी trust policy

का: Trust policy role कोण घेऊ शकतो ते सांगते.

काय करायचं: lambda.amazonaws.com ला role assume करू देणारी trust policy लिहा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम Item टाका

का: DynamoDB JSON प्रत्येक value चा type दाखवतो: S string, N number.

काय करायचं: lisboatiles-orders मध्ये orderId "o-101" (string) व amount 2500 (number) असलेला item टाका.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Timeout व memory बदला

का: जास्त memory म्हणजे जास्त CPU; timeout अडकलेले runs थांबवतो.

काय करायचं: lisboatiles-orders-fn चा timeout 30 seconds व memory 512 MB करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Function ला logs लिहू द्या

का: या actions शिवाय Lambda logs CloudWatch मध्ये दिसत नाहीत.

काय करायचं: फक्त arn:aws:logs:*:*:* वर logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents allow करा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. 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 करावं.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. 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.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. 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 मध्ये.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Environment variables द्या

का: Table नावांसारख्या settings code बाहेर ठेवा.

काय करायचं: lisboatiles-orders-fn वर environment variable TABLE=lisboatiles-orders द्या.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. 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 मध्ये.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Lambda GB-seconds

का: Lambda memory × time bill करतो.

काय करायचं: 1,000,000 invocations, 512 MB, प्रत्येकी 200 ms. किती GB-seconds?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

उजळणी card: URL shortener म्हणजे काय?. Instagram bio / Flipkart share मध्ये मोठा URL बसत नाही. छोटा code हवा जो मोठा page उघडतो. URL shortener long URL ला short code मागे ठेवतो. Short link → redirect + clicks count. API Gateway + Lambda + DynamoDB (shortCode → longUrl, clicks). Always-on EC2 नको. POST → shortCode. GET /Ab12XyZ → 302 Location long URL.
उजळणी card: URL shortener म्हणजे काय? · PNG download करा · Card page उघडा
उजळणी card: URL shortener architecture. Front door, compute, आणि codes साठी keyed storage जुळायला हवं. HTTP API → Lambda → DynamoDB PK shortCode. Attributes: longUrl, clicks. Table → IAM → Lambda → routes → env TABLE_NAME, BASE_URL. POST नंतर GET -I → Location header; clicks = 1.
उजळणी card: URL shortener architecture · PNG download करा · Card page उघडा
उजळणी card: 302 आणि ADD clicks का?. 200 + JSON मध्ये URL दिलं तर प्रत्येक client ना redirect लिहावं लागतं. Browser Location follow करतो. 302 + Location = classic shortener. ADD clicks = concurrent hits वर atomic increment. GetItem → UpdateItem ADD clicks → 302 + Location. दोन phones एकत्र → दोन्ही redirect; clicks = 2, lost update नाही.
उजळणी card: 302 आणि ADD clicks का? · PNG download करा · Card page उघडा
उजळणी card: Shortener lab cleanup. विसरलेले HTTP API / DynamoDB table account गोंधळ + bill surprise. क्रम: HTTP API → Lambda → DynamoDB table → IAM role. प्रत्येक service मध्ये delete; Billing check. जुनी invoke URL fail; Cost Explorer जवळपास शून्य.
उजळणी card: Shortener lab cleanup · PNG download करा · Card page उघडा
तुलना: JSON 200 with URL vs HTTP 302 redirect. JSON 200 with URL: Client JSON वाचून navigate. HTTP 302 redirect: Browser Location follow.
तुलना: JSON 200 with URL vs HTTP 302 redirect · PNG download करा · Card page उघडा
मुलाखत card: 200 + URL ऐवजी 302 का?. Browser Location follow करतो — short link ची अपेक्षा. 200 JSON = प्रत्येक client ना special-case. 302 + Location = longUrl.
मुलाखत card: 200 + URL ऐवजी 302 का? · PNG download करा · Card page उघडा
मुलाखत card: Read-modify-write ऐवजी ADD clicks का?. Concurrent read 5 → दोन्ही write 6 = एक click गमावला. UpdateItem ADD atomic. ADD clicks :one.
मुलाखत card: Read-modify-write ऐवजी ADD clicks का? · PNG download करा · Card page उघडा
मुलाखत card: Short code resolve: GetItem की Scan?. नेहमी GetItem by shortCode. Scan = पूर्ण table. Single-key lookup pattern. GetItem Key shortCode.
मुलाखत card: Short code resolve: GetItem की Scan? · PNG download करा · Card page उघडा

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