Ravindra BagaleCourses & study guides English

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 पण.

Request मार्गBrowserCloudFront → S3 HTML/JSJS fetchhttps://api.../notesAPI Gateway HTTP APIनंतर JWTLambdaDynamoDB CRUDJSON responseUI list update
EC2 नाही. Always-on server नाही.

Download: serverless-notes-app.zip — public/, lambda/index.mjs, lambda/handler.py, README.md, sample IAM policy.

2. Architecture चे भाग

PieceAWS serviceका
Static UIS3 + CloudFrontस्वस्त जगभर HTTPS; server नाही
HTTP APIAPI Gateway HTTP APIRoutes, CORS, TLS URL
LogicLambda (Node 20.x)फक्त requests वर चालते
DataDynamoDB on-demandKeyed notes; प्रति request

3. Lab: click by click deploy

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

Region ap-south-1. yourname बदला. Free tier लक्षात ठेवा.

A. DynamoDB table

  1. Table yourname-notes. PK: noteId (String). On-demand. Sort key नाही.
  2. Active होईपर्यंत थांबा.

B. Lambda साठी IAM role

  1. IAM → Roles → Create → AWS service → Lambda.
  2. AWSLambdaBasicExecutionRole attach. Name yourname-notes-lambda-role.
  3. 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

  1. Function yourname-notes-api, Node.js 20.x, existing role.
  2. Zip मधला lambda/index.mjs editor मध्ये (किंवा root ला index.mjs zip upload). Handler: index.handler.
  3. Environment: TABLE_NAME=yourname-notes.
  4. Memory 256 MB, Timeout 10 s. Deploy.

D. HTTP API

  1. HTTP API yourname-notes-http → Lambda integrate.
  2. Routes: GET/POST /notes, DELETE /notes/{id}.
  3. CORS: origin *, methods GET,POST,DELETE,OPTIONS.
  4. Create. Invoke URL = API_BASE.
  5. 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

  1. public/app.js मध्ये API_BASE सेट.
  2. Bucket yourname-notes-web, Block Public Access on.
  3. public/ मधली files upload.
  4. CloudFront: bucket origin, OAC, HTTP→HTTPS, default root index.html. Bucket policy paste.
  5. CloudFront URL उघडा → note add → refresh → delete. Network 200.

F. Optional Python twin

दुसरी function handler.py सह, तोच env/role, compare करण्यासाठी route.

Cleanup (हे करा)

  1. CloudFront disable मग delete (काही minutes).
  2. S3 website bucket empty + delete.
  3. HTTP API आणि Lambda delete.
  4. DynamoDB table आणि IAM role delete.
  5. 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 पण खर्च/गोंधळ.

घरी करून बघा

  1. Lambda मध्ये PUT /notes/{id} आणि UI edit button.
  2. DynamoDB Streams on करून दुसरी Lambda प्रत्येक change log करेल.

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

  1. Serverless notes = S3/CloudFront + API Gateway + Lambda + DynamoDB.
  2. एक table साठी IAM least privilege.
  3. CORS आणि API_BASE browser ला API शी जोडतात.
  4. Lab resources नेहमी cleanup.

सराव Tasks

या scenario बद्दल

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

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

मध्यम Function invoke करा

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

काय करायचं: pandharpuryatra-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.

काय करायचं: pandharpuryatra-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 थांबवतो.

काय करायचं: pandharpuryatra-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 लागते.

काय करायचं: pandharpuryatra-orders-fn ला s3invoke permission statement द्या: s3.amazonaws.com ने bucket arn:aws:s3:::pandharpuryatra-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 बनवतो.

काय करायचं: pandharpuryatra-api नावाची HTTP API बनवा जिचा target arn:aws:lambda:ap-south-1:128642229481:function:pandharpuryatra-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 लागतो.

काय करायचं: pandharpuryatra-orders-fn function बनवा: runtime python3.12, handler app.handler, role arn:aws:iam::128642229481: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 बाहेर ठेवा.

काय करायचं: pandharpuryatra-orders-fn वर environment variable TABLE=pandharpuryatra-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 लागतो.

काय करायचं: pandharpuryatra-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: Serverless notes architecture. UI, API, compute, data जुळायला हवेत. S3+CloudFront UI → API Gateway → Lambda → DynamoDB. आधी boxes; मग table, role, function, API, CDN. Browser GET /notes; DynamoDB थेट नाही.
उजळणी card: Serverless notes architecture · PNG download करा · Card page उघडा
उजळणी card: Lab साठी least-privilege IAM. Student role वर AdministratorAccess = धोका. Basic logging + एका table ARN वर DynamoDB actions. फक्त yourname-notes वर Put/Get/Delete/Scan. Policy मध्ये चुकीचं table → AccessDenied.
उजळणी card: Lab साठी least-privilege IAM · PNG download करा · Card page उघडा
उजळणी card: API, CORS आणि API_BASE. UI आणि API वेगळ्या origins. एक चुकीची URL demo तुडवते. HTTP API routes + CORS; app.js मध्ये API_BASE (trailing slash नाही). GET/POST /notes, DELETE /notes/{id}; invoke URL app.js. UI मध्ये note → Network 201 → list refresh.
उजळणी card: API, CORS आणि API_BASE · PNG download करा · Card page उघडा
उजळणी card: Lab resources नेहमी clean up. विसरलेलं CloudFront/tables खर्च किंवा गोंधळ. CDN, S3 empty, API, Lambda, table, IAM role delete. CloudFront आधी disable (wait), मग delete; Cost Explorer. Cleanup नंतर bill जवळपास शून्य.
उजळणी card: Lab resources नेहमी clean up · PNG download करा · Card page उघडा
तुलना: S3 + CloudFront UI vs EC2-hosted UI. S3 + CloudFront UI: Static files; UI साठी OS patch नाही. EC2-hosted UI: Web server OS तुम्ही.
तुलना: S3 + CloudFront UI vs EC2-hosted UI · PNG download करा · Card page उघडा
तुलना: API Gateway HTTP API vs Lambda Function URL. API Gateway HTTP API: Routes, stages, JWT, CORS. Lambda Function URL: एका function वर थेट HTTPS.
तुलना: API Gateway HTTP API vs Lambda Function URL · PNG download करा · Card page उघडा
मुलाखत card: Lab list मध्ये Scan ठीक, production user list मध्ये नाही का?. Lab मध्ये थोडी items; production ला user key ने Query. Table मोठी तशी Scan cost/latency वाढते. खरे users येण्याआधी userId PK/GSI.
मुलाखत card: Lab list मध्ये Scan ठीक, production user list मध्ये नाही का? · PNG download करा · Card page उघडा
मुलाखत card: पुढे login कसं जोडाल?. Cognito user pool + HTTP API वर JWT authorizer. प्रत्येक note वर userId; फक्त त्या user ची Query. UI Cognito tokens; API JWT verify.
मुलाखत card: पुढे login कसं जोडाल? · PNG download करा · Card page उघडा
मुलाखत card: Private S3 bucket सोबत CloudFront OAC का?. Bucket private; फक्त CloudFront objects वाचतो. Public ACL शिवाय HTTPS आणि caching. OAC create करताना दिसणारी bucket policy attach.
मुलाखत card: Private S3 bucket सोबत CloudFront OAC का? · PNG download करा · Card page उघडा
मुलाखत card: Notes app मधील चार AWS pieces सांगा.. S3+CloudFront, API Gateway, Lambda, DynamoDB. Lab path ला EC2 नको. Interview मध्ये draw — पूर्ण path दिसतो.
मुलाखत card: Notes app मधील चार AWS pieces सांगा. · PNG download करा · Card page उघडा

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