Ravindra BagaleCourses & study guides English

Project: Lambda, DynamoDB आणि SNS ने Contact Form API बनवा (Source Code)

Contact form: DynamoDB मध्ये message + SNS ने email — serverless, ap-south-1.

या chapter मध्ये तुम्ही काय शिकाल

  • contact POST API
  • DynamoDB मध्ये save
  • SNS email alert
  • Test आणि cleanup

1. रोजचं उदाहरण

हे का लागतं?

Coaching class site: name/email/message save + mail — रात्रभर EC2 नको.

हे काय आहे?

POST /contact → Lambda → PutItem + SNS email topic.

मार्गClientPOSTAPI GatewayLambdaPutItemSNSemail
SNS confirm email एकदा.

Download: contact-form-api.zip

2. Lab

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

Region ap-south-1.

A. DynamoDB + SNS

  1. Table PK messageId.
  2. SNS topic + email confirm.

B. IAM + Lambda

  1. Role + PutItem + Publish.
  2. Lambda + TABLE_NAME, TOPIC_ARN.

C. API + test

  1. POST /contact + CORS.
curl -s -X POST "$API_BASE/contact" -H 'content-type: application/json' \
  -d '{"name":"Riya","email":"riya@example.com","message":"Need AWS batch timing"}'

ok true, मग email + DynamoDB.

Cleanup

  1. सर्व delete.
  2. Topic काढा.

3. Interview

प्र. SNS का?

एका alert ला SNS पुरेसं.

प्र. CORS का?

Origin वेगळं.

प्र. PII?

IAM कडक, data delete.

प्र. SNS fail?

Lab मध्ये save आधी; production outbox.

प्र. Cleanup?

API, Lambda, table, topic, role.

घरी करून बघा

  1. Honeypot field.
  2. API key सह GET.

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

  1. Contact = API GW + Lambda + DynamoDB + SNS.
  2. SNS confirm.
  3. Input validate.
  4. Cleanup.

सराव Tasks

या scenario बद्दल

Nashik Vineyards हा नाशिक मधला वाइन व शेती व्यवसाय आहे. Meera Joshi त्यांचं 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 मध्ये ठेवतो.

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

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

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

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

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

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

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

अवघड SQS queue Lambda ला जोडा

का: Event source mapping मुळे Lambda queue poll करून batches मध्ये messages process करतो.

काय करायचं: Queue arn:aws:sqs:ap-south-1:107079156755:nashikvine-orders पासून nashikvine-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: SNS सह contact form API. Contact Us box: फक्त email गमवू शकतो. Saved row + alert हवं. API Gateway POST → Lambda → DynamoDB save + SNS email. Table + SNS topic + Lambda + POST /contact. POST → 201 + DynamoDB row + email.
उजळणी card: SNS सह contact form API · PNG download करा · Card page उघडा
उजळणी card: Alert साठी SNS का?. Lambda मध्ये SMTP = passwords/ports/spam. गरज: “कोणी लिहिलं की email”. SNS = pub/sub. Email subscribe; Lambda publish; SNS deliver. Topic → email subscribe → confirm → TOPIC_ARN → IAM Publish. नंतर SMS किंवा दुसरी Lambda — handler न बदलता.
उजळणी card: Alert साठी SNS का? · PNG download करा · Card page उघडा
उजळणी card: आधी save, मग notify. Email fail आणि save नसेल तर lead गेला. आधी PutItem; मग SNS Publish; 201 + id. uuid → put_item → publish → JSON. SNS down तरी DynamoDB row राहतो.
उजळणी card: आधी save, मग notify · PNG download करा · Card page उघडा
तुलना: DynamoDB then SNS vs SNS only. DynamoDB then SNS: Email fail तरी message save. SNS only: Publish fail → lead जाऊ शकतो.
तुलना: DynamoDB then SNS vs SNS only · PNG download करा · Card page उघडा
मुलाखत card: SNS आधी की DynamoDB आधी?. आधी save. Publish fail तरी lead राहतो. फक्त notify = outage मध्ये message गेला. PutItem → publish; 201 + id.
मुलाखत card: SNS आधी की DynamoDB आधी? · PNG download करा · Card page उघडा
मुलाखत card: Lambda SMTP ऐवजी SNS का?. Mail credentials नको; SNS delivery. नंतर SMS/Lambda subscriber — handler न बदलता. TOPIC_ARN + least-privilege Publish.
मुलाखत card: Lambda SMTP ऐवजी SNS का? · PNG download करा · Card page उघडा

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