Ravindra BagaleCourses & study guides English

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

  1. Function notes-api-lab, Python 3.12, basic execution role.
  2. 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"})}
  1. Deploy. access-control-allow-origin: * का: lab मध्ये दुसऱ्या origin चा browser response वाचू शकेल. Production मध्ये खरा domain.

2. HTTP API

  1. API Gateway → Create API → HTTP API → Build. Name: notes-http.
  2. Add integration → Lambda → notes-api-lab.
  3. Routes: GET /notes, POST /notes, GET /notes/{id}. प्रत्येक Lambda integration ला.
  4. Stages: $default auto-deploy. Create.
  5. 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)

  1. HTTP API → CORS → Configure. Origins: https://notes.campus.test (lab साठी *). Methods: GET, POST, OPTIONS. Headers: content-type, authorization.
  2. Lambda मधूनही तेच headers परत करा (lab code प्रमाणे).
  3. 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)

  1. REST API → /notes → GET/POST Lambda proxy. Stage prod वर deploy.
  2. API Keys → Create → value एकदा copy.
  3. Usage plans → Create → throttle 5 req/s, burst 10 → quota 1000/day → stage prod → API key जोडा.
  4. प्रत्येक method: Method Request → API Key Required = true. Redeploy.
  5. curl -H "x-api-key: YOURKEY" ने call. Header नसेल तर 403.

5. Custom domain + ACM (रूपरेषा)

  1. api.yourdomain.com साठी ACM certificate API च्या region मध्ये (Regional). DNS ने validate.
  2. API Gateway → Custom domain names → Create → TLS 1.2 → certificate → `/` map to stage.
  3. Route 53/DNS: console मधल्या Gateway target वर alias/CNAME. का: browsers ना resolve हवं.
  4. Available होईपर्यंत थांबा, मग https://api.yourdomain.com/notes.

Cleanup

  1. HTTP/REST APIs, custom domains, Lambda, न वापरलेली keys/plans delete.
  2. इतर 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 साठी.)

घरी करून बघा

  1. GET /notes ला limit query param घालून list slice करा.
  2. S3/CloudFront वर HTML ठेवून fetch ने API call करा; CORS fix करा.

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

  1. GET/POST साठी HTTP API + Lambda proxy जलद मार्ग.
  2. CORS headers (आणि OPTIONS) browser calls उघडतात.
  3. REST वर API keys + usage plans partners नियंत्रित करतात.
  4. Custom domain = ACM + Gateway mapping + DNS.

सराव Tasks

या scenario बद्दल

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

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

मध्यम Function invoke करा

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

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

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

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

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

काय करायचं: texassolar-orders-fn ला s3invoke permission statement द्या: s3.amazonaws.com ने bucket arn:aws:s3:::texassolar-uploads कडून lambda:InvokeFunction करावं.

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

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

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

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

अवघड 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.

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

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

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

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

उजळणी card: Browser ना CORS का लागतं. curl चालतं; browser block. Students ना वाटतं API बंद आहे. Same-Origin Policy. Cross-origin ला Access-Control-Allow-* headers. HTTP API वर CORS; proxy साठी Lambda मध्ये पण Allow-Origin. UI CloudFront, API execute-api → origins वेगळे → CORS.
उजळणी card: Browser ना CORS का लागतं · PNG download करा · Card page उघडा
उजळणी card: Path आणि query parameters. Hard-coded ids scale होत नाहीत. Routes ना resource ids हवेत. Path: /notes/{id}. Query: /notes?limit=10. दोन्ही event मध्ये. Route मध्ये {id}; Lambda मध्ये event.pathParameters.id. DELETE /notes/abc-123 ते item delete.
उजळणी card: Path आणि query parameters · PNG download करा · Card page उघडा
उजळणी card: API keys, plans आणि throttle. Anonymous flood free tier जाळतो. Partners ना quotas. REST: API keys + usage plans = quota आणि throttle. Key → usage plan → stage → method require → redeploy. Partner 10 req/s, 100k/day; जास्त → 429.
उजळणी card: API keys, plans आणि throttle · PNG download करा · Card page उघडा
उजळणी card: ACM सह custom domain. execute-api URL résumé project वर तात्पुरत्या दिसतात. Custom domain + ACM = https://api.yourdomain.com. Regional API: cert त्याच region. Domain → stage map. Students api.school.com/notes वापरतात.
उजळणी card: ACM सह custom domain · PNG download करा · Card page उघडा
तुलना: CORS vs API authorization. CORS: Browser cross-origin access. API authorization: API कोण call करू शकतं.
तुलना: CORS vs API authorization · PNG download करा · Card page उघडा
तुलना: Throttle vs Quota. Throttle: Short rate (req/s). Quota: Longer budget (उदा. प्रति दिन).
तुलना: Throttle vs Quota · PNG download करा · Card page उघडा
मुलाखत card: CORS preflight म्हणजे काय?. काही cross-origin calls आधी browser OPTIONS पाठवतो. Server ने Allow-Methods आणि Allow-Headers द्यावेत. OPTIONS fail → खरा POST browser बाहेर जात नाही.
मुलाखत card: CORS preflight म्हणजे काय? · PNG download करा · Card page उघडा
मुलाखत card: Throttle vs quota?. Throttle = short rate. Quota = दिवसभराचा budget. दोन्ही backend आणि bill वाचवतात. Student plan: 10 req/s, 50,000/day.
मुलाखत card: Throttle vs quota? · PNG download करा · Card page उघडा
मुलाखत card: REST method settings बदलल्यावर पुढे काय?. Stage वर redeploy; नाहीतर clients जुनी config पाहतात. Deploy होईपर्यंत settings live नाहीत. Actions › Deploy API › stage.
मुलाखत card: REST method settings बदलल्यावर पुढे काय? · PNG download करा · Card page उघडा
मुलाखत card: Proxy Lambda ने काय return करायचं?. statusCode, headers, body (सहसा JSON string). Gateway त्या object ला खऱ्या HTTP response मध्ये map करतो. JSON.stringify विसरले → client ला खराब payload.
मुलाखत card: Proxy Lambda ने काय return करायचं? · PNG download करा · Card page उघडा

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