API Gateway आणि Lambda ने REST API Step by Step बनवा
Amazon API Gateway म्हणजे काय? मध्ये product निवडलं. आता बनवू: Lambda backend, GET/POST routes, path/query parameters, CORS (browser का block करतो), usage plan सह API keys, throttling, आणि ACM सह custom domain sketch.
या chapter मध्ये तुम्ही काय शिकाल
- Lambda proxy सह GET आणि POST
- Path params आणि query strings
- CORS — का आणि कसं
- API keys, usage plans, throttling (REST)
- Custom domain + ACM रूपरेषा
1. गोष्ट: class app साठी notes API
Students ची React app https://notes.campus.test notes list/create करेल. API https://api.campus.test वर. CORS headers नसतील तर curl चाललं तरी browser block करेल.
2. Lab: HTTP API + Lambda (GET आणि POST)
कसं करायचं (step by step)
Happy path साठी HTTP API (स्वस्त, सोपं). नंतर REST मध्ये API keys. Region ap-south-1.
1. Lambda function
- Function
notes-api-lab, Python 3.12, basic execution role. - Paste:
import json, urllib.parse
NOTES = [{"id": "1", "text": "Buy milk"}] # lab memory only
def lambda_handler(event, context):
method = event.get("requestContext", {}).get("http", {}).get("method") or event.get("httpMethod")
path = event.get("rawPath") or event.get("path") or "/"
headers = {"content-type": "application/json", "access-control-allow-origin": "*"}
if method == "GET" and path.endswith("/notes"):
return {"statusCode": 200, "headers": headers, "body": json.dumps(NOTES)}
if method == "GET" and "/notes/" in path:
nid = path.rstrip("/").split("/")[-1]
hit = next((n for n in NOTES if n["id"] == nid), None)
return {"statusCode": 200 if hit else 404, "headers": headers, "body": json.dumps(hit or {"error": "missing"})}
if method == "POST" and path.endswith("/notes"):
body = json.loads(event.get("body") or "{}")
item = {"id": str(len(NOTES) + 1), "text": body.get("text", "")}
NOTES.append(item)
return {"statusCode": 201, "headers": headers, "body": json.dumps(item)}
return {"statusCode": 404, "headers": headers, "body": json.dumps({"error": "no route"})}
- Deploy.
access-control-allow-origin: *का: lab मध्ये दुसऱ्या origin चा browser response वाचू शकेल. Production मध्ये खरा domain.
2. HTTP API
- API Gateway → Create API → HTTP API → Build. Name:
notes-http. - Add integration → Lambda →
notes-api-lab. - Routes:
GET /notes,POST /notes,GET /notes/{id}. प्रत्येक Lambda integration ला. - Stages:
$defaultauto-deploy. Create. - Invoke URL copy करा.
3. curl ने test
BASE=https://abc123.execute-api.ap-south-1.amazonaws.com
curl -s $BASE/notes
curl -s -X POST $BASE/notes -H 'content-type: application/json' -d '{"text":"Ship lab"}'
curl -s $BASE/notes/1
अपेक्षित: JSON list, मग नवीन id सह 201, मग एक note. Path param path मध्ये; query event.queryStringParameters मध्ये.
3. CORS — browser तुम्हाला का रोखतो
हे का लागतं?
Browsers Same-Origin Policy पाळतात. app.example.com वरून api.example.com cross-origin. API परवानगी दिल्याशिवाय browser response लपवतो.
हे काय आहे?
CORS ही परवानगी, Access-Control-Allow-Origin सारख्या headers ने. विशेष headers/methods साठी आधी OPTIONS preflight. API ने OPTIONS ला allow headers द्यावेत.
कसं करायचं (step by step)
- HTTP API → CORS → Configure. Origins:
https://notes.campus.test(lab साठी*). Methods: GET, POST, OPTIONS. Headers: content-type, authorization. - Lambda मधूनही तेच headers परत करा (lab code प्रमाणे).
- Browser DevTools → Network: fail = CORS errors; fix नंतर 200.
4. API keys, usage plans आणि throttling (REST)
हे का लागतं?
Partners एक खुली URL share करू नये. Partner ला key आणि rate limit हवं जेणेकरून एक client Lambda bill वाढवू नये.
हे काय आहे?
हे REST APIs वर (HTTP APIs वर नाही). API key = x-api-key मध्ये पाठवायची secret. Usage plan keys ला stages शी जोडून throttle (req/s) आणि quota (req/day) देते.
कसं करायचं (step by step)
- REST API →
/notes→ GET/POST Lambda proxy. Stageprodवर deploy. - API Keys → Create → value एकदा copy.
- Usage plans → Create → throttle 5 req/s, burst 10 → quota 1000/day → stage
prod→ API key जोडा. - प्रत्येक method: Method Request → API Key Required = true. Redeploy.
curl -H "x-api-key: YOURKEY"ने call. Header नसेल तर 403.
5. Custom domain + ACM (रूपरेषा)
api.yourdomain.comसाठी ACM certificate API च्या region मध्ये (Regional). DNS ने validate.- API Gateway → Custom domain names → Create → TLS 1.2 → certificate → `/` map to stage.
- Route 53/DNS: console मधल्या Gateway target वर alias/CNAME. का: browsers ना resolve हवं.
- Available होईपर्यंत थांबा, मग
https://api.yourdomain.com/notes.
Cleanup
- HTTP/REST APIs, custom domains, Lambda, न वापरलेली keys/plans delete.
- इतर labs वापरत असतील तरच ACM ठेवा.
6. Interview questions
प्र. Path parameters Lambda पर्यंत कसे?
Proxy मध्ये path चा भाग; HTTP APIs pathParameters मध्येही.
प्र. curl चालत असताना CORS का?
curl browser नाही. Browser ला Allow-Origin headers लागतात.
प्र. API key vs IAM?
API key = client app + quotas; end-user identity नाही. IAM = AWS principal ने sign.
प्र. Throttle vs quota?
Throttle = short-rate (req/s). Quota = दीर्घ budget (req/day).
प्र. API Gateway साठी regional ACM का?
Regional custom domains ना certificate API region मध्ये. (us-east-1 CloudFront साठी.)
घरी करून बघा
- GET /notes ला limit query param घालून list slice करा.
- S3/CloudFront वर HTML ठेवून fetch ने API call करा; CORS fix करा.
थोडक्यात सांगायचं तर
- GET/POST साठी HTTP API + Lambda proxy जलद मार्ग.
- CORS headers (आणि OPTIONS) browser calls उघडतात.
- REST वर API keys + usage plans partners नियंत्रित करतात.
- Custom domain = ACM + Gateway mapping + DNS.
सराव Tasks
Texas Solar Co हा ऑस्टिन मधला सौर ऊर्जा व्यवसाय आहे. Carlos Ramirez त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे USD मध्ये मोजले जातात आणि AWS resources us-east-2 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 12
सोपं Functions ची list
का: या Region मध्ये कोणते functions आहेत ते पाहा.
काय करायचं: us-east-2 मधले Lambda functions दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Function invoke करा
का: Invoke function आत्ता चालवतो व उत्तर file मध्ये ठेवतो.
काय करायचं: texassolar-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 दाबा.
मध्यम Timeout व memory बदला
का: जास्त memory म्हणजे जास्त CPU; timeout अडकलेले runs थांबवतो.
काय करायचं: texassolar-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 लागते.
काय करायचं: texassolar-orders-fn ला s3invoke permission statement द्या: s3.amazonaws.com ने bucket arn:aws:s3:::texassolar-uploads कडून lambda:InvokeFunction करावं.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Lambda function बनवा
का: Lambda ला code zip, runtime, handler नाव व execution role लागतो.
काय करायचं: texassolar-orders-fn function बनवा: runtime python3.12, handler app.handler, role arn:aws:iam::111225901510: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 बाहेर ठेवा.
काय करायचं: texassolar-orders-fn वर environment variable TABLE=texassolar-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 लागतो.
काय करायचं: texassolar-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 दाबा.
अवघड Lambda साठी HTTP API quick-create
का: Quick create HTTP API, default route व stage बनवतो.
काय करायचं: texassolar-api नावाची HTTP API बनवा जिचा target arn:aws:lambda:us-east-2:111225901510:function:texassolar-orders-fn.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड SQS queue Lambda ला जोडा
का: Event source mapping मुळे Lambda queue poll करून batches मध्ये messages process करतो.
काय करायचं: Queue arn:aws:sqs:us-east-2:111225901510:texassolar-orders पासून texassolar-orders-fn ला batch size 10 सह event source mapping बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.










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