Ravindra BagaleCourses & study guides English

तुमची पहिली AWS Lambda Function Step by Step बनवा

AWS Lambda म्हणजे काय? मध्ये कल्पना भेटली. आता खरी function बनवू: console clicks, पाच भाषांत तोच logic, test event, CloudWatch logs, आणि IAM execution role स्पष्ट why सह.

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

  • Lambda console मध्ये function बनवा
  • तोच handler Python, Node.js, Java, .NET आणि Go मध्ये
  • Test events वापरा आणि CloudWatch Logs वाचा
  • Execution role आणि basic permissions समजून घ्या
  • Memory, timeout आणि environment variables बदला

1. गोष्ट: एक discount calculator, पाच teams

एका कंपनीत पाच teams — Python, Node, Java, .NET, Go — सगळ्यांना एकच नियम: price in, discount out. पाच always-on servers ऐवजी एक Lambda pattern. प्रत्येक team आपला runtime. Trigger आणि IAM role चा आकार तोच.

2. Execution role — Lambda ला IAM का लागतो

हे का लागतं?

तुमचा code अनेकदा AWS call करतो: logs, S3, DynamoDB. Lambda ने परवानगी सिद्ध करावी. Code मधल्या access keys leak होतात. Role होत नाही.

हे काय आहे?

Execution role म्हणजे function चालताना Lambda घेतलेला IAM role. Trust: lambda.amazonaws.com ला sts:AssumeRole. Permissions: code काय करू शकतो. Managed policy AWSLambdaBasicExecutionRole log groups/streams देते — नसेल तर Hello सुद्धा "broken" वाटतो कारण logs दिसत नाहीत.

Ravindra Bagale's Tip

फक्त हव्या त्याच permissions (S3 read, DynamoDB write). Lambda role ला AdministratorAccess लावू नका.

3. पाच भाषांत handler चा आकार

हे काय आहे?

प्रत्येक runtime ला handler असतो: AWS event आणि context देऊन call करतो. खाली प्रत्येक snippet {"total": price * (1 - discount)} परत करतो.

Python 3.12

import json
def lambda_handler(event, context):
    price = float(event["price"])
    discount = float(event.get("discount", 0.1))
    return {"total": round(price * (1 - discount), 2)}

Node.js 20.x

exports.handler = async (event) => {
  const price = Number(event.price);
  const discount = Number(event.discount ?? 0.1);
  return { total: Math.round(price * (1 - discount) * 100) / 100 };
};

Java 17 (handler class)

package example;
import java.util.Map;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class Discount implements RequestHandler<Map<String, Object>, Map<String, Object>> {
  public Map<String, Object> handleRequest(Map<String, Object> e, Context c) {
    double price = ((Number) e.get("price")).doubleValue();
    double discount = e.containsKey("discount") ? ((Number) e.get("discount")).doubleValue() : 0.1;
    return Map.of("total", Math.round(price * (1 - discount) * 100.0) / 100.0);
  }
}

.NET 8 (C#)

using Amazon.Lambda.Core;
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace Discount;
public class Function {
  public Dictionary<string, double> FunctionHandler(Dictionary<string, double> e, ILambdaContext ctx) {
    var price = e["price"]; var discount = e.GetValueOrDefault("discount", 0.1);
    return new Dictionary<string, double> { ["total"] = Math.Round(price * (1 - discount), 2) };
  }
}

Go 1.x

package main
import ("context"; "github.com/aws/aws-lambda-go/lambda")
type In struct { Price float64 `json:"price"`; Discount float64 `json:"discount"` }
type Out struct { Total float64 `json:"total"` }
func Handle(ctx context.Context, e In) (Out, error) {
  d := e.Discount; if d == 0 { d = 0.1 }
  return Out{Total: e.Price * (1 - d)}, nil
}
func main() { lambda.Start(Handle) }

4. Lab: console मध्ये discount function (Python)

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

  1. Lambda → Create function → Author from scratch. Name: discount-lab. Runtime: Python 3.12. Basic Lambda permissions सह नवीन role.
  2. वरील Python handler paste → Deploy.
  3. Configuration → General configuration → Edit → Memory 256 MB, Timeout 10 s → Save. का: imports आणि JSON ला थोडी जागा.
  4. Configuration → Environment variables → Edit → DEFAULT_DISCOUNT = 0.1 → Save. Optional: os.environ ने वाचा.
  5. Test → Event name ten-percent, JSON:
{"price": 1000, "discount": 0.1}
  1. Test. अपेक्षित: {"total": 900.0}. Result pane मधली billed duration बघा.
  2. Monitor → View CloudWatch logs → latest stream → REPORT line मध्ये Duration आणि Memory Size.
  3. Configuration → Permissions → role name → AWSLambdaBasicExecutionRole आहे का बघा. का: logs ची परवानगी.

AWS CLI ने तोच test

aws lambda invoke --function-name discount-lab   --payload '{"price":500,"discount":0.2}' --cli-binary-format raw-in-base64-out out.json   --region ap-south-1 && cat out.json
# Expected: {"total": 400.0}

Cleanup

  1. Function discount-lab delete करा.
  2. IAM → Roles → execution role न वापरला तर delete.

5. Interview questions

प्र. Handler ला काय मिळतं?

Event (input JSON) आणि context (request id, remaining time, memory).

प्र. Console मध्ये edit नंतर Deploy का?

Edit draft मध्ये राहतो; Deploy शिवाय test जुना code चालवतो.

प्र. AWSLambdaBasicExecutionRole काय देते?

CloudWatch Logs मध्ये log groups बनवणं आणि streams लिहिणं.

प्र. Hard-code न करता config कशी?

Function वर environment variables, secrets साठी SSM / Secrets Manager.

प्र. एक function दोन runtimes वापरते का?

नाही. एक function = एक runtime. दुसऱ्या भाषेसाठी दुसरी function.

घरी करून बघा

  1. discount-lab Node.js 20.x मध्ये बनवा आणि CLI ने invoke करा.
  2. Test bucket वर s3:ListBucket permission देऊन function मधून list करा.

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

  1. Function बनवा → handler → Deploy → Test → logs बघा.
  2. Execution role = Lambda trust + code ला हव्या permissions.
  3. तोच logic Python, Node, Java, .NET, Go मध्ये जातो.
  4. Memory, timeout आणि env vars हे पहिले knobs.

सराव Tasks

या scenario बद्दल

Sangli Turmeric Traders हा सांगली मधला मसाले व्यापार व्यवसाय आहे. Dattatray Chavan त्यांचं 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 मध्ये ठेवतो.

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

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

मध्यम Logs live पाहा

का: aws logs tail --follow म्हणजे CloudWatch Logs साठी tail -f.

काय करायचं: /aws/lambda/sanglihaldi-orders-fn log group live follow करा.

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

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

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

काय करायचं: sanglihaldi-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:126983531579:sanglihaldi-orders पासून sanglihaldi-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 दाबा.

अवघड S3 ला function call करू द्या

का: S3 function invoke करण्याआधी resource-based permission लागते.

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

कसं करायचं:
  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: Console मध्ये function बनवा. Docs वाचणं पुरेसं नाही. एक चालणारी function विश्वास वाढवते. Author from scratch: name, runtime, architecture, execution role. Lambda › Create function › Author from scratch › create › edits नंतर Deploy. hello-lab {"ok": true} देतो. {} ने Test.
उजळणी card: Console मध्ये function बनवा · PNG download करा · Card page उघडा
उजळणी card: एक idea, अनेक runtimes. Teams वेगवेगळ्या languages बोलतात. तोच event shape सगळीकडे चालतो. Python, Node.js, Java, .NET, Go — common managed. एक function = एक runtime. दुसऱ्या runtime मध्ये lab clone; handler contract तोच. Python: def handler…. Node: exports.handler = async ….
उजळणी card: एक idea, अनेक runtimes · PNG download करा · Card page उघडा
उजळणी card: Test events आणि CloudWatch Logs. Production मध्ये तुटलेला JSON त्रासदायक. आधी saved event ने Test. Test events = sample JSON. print/console.log → CloudWatch Logs. Test tab → event → invoke. Monitor › View CloudWatch logs. "order=42" नवीन stream मध्ये सेकंदात.
उजळणी card: Test events आणि CloudWatch Logs · PNG download करा · Card page उघडा
उजळणी card: Env vars, memory आणि timeout. Hard-coded table names lab→prod मध्ये तुटतात. Env vars = non-secret config. Memory = CPU. Timeout = runaway थांबवतो. Configuration › Environment variables; General मध्ये memory/timeout. Timeout 3 s → 5 s call fail. API lab साठी 10 s.
उजळणी card: Env vars, memory आणि timeout · PNG download करा · Card page उघडा
मुलाखत card: Handler चे दोन मुख्य arguments काय?. event (payload) आणि context (request id, remaining time). Business data event मध्ये; timeout/logging साठी context. context.get_remaining_time_in_millis() लवकर abort करायला मदत.
मुलाखत card: Handler चे दोन मुख्य arguments काय? · PNG download करा · Card page उघडा
मुलाखत card: Code बदलून Deploy का दाबावं?. Editor draft save करतो; invoke शेवटची deployed version चालवतो. Deploy वगळलं की tests जुना code दाखवतात. Edit → Deploy → Test. नंतर aliases साठी तोच सवय.
मुलाखत card: Code बदलून Deploy का दाबावं? · PNG download करा · Card page उघडा
मुलाखत card: Lambda मध्ये access keys ऐवजी IAM role का?. Roles temporary credentials देतात; code/env मधले keys leak होऊ शकतात. Rotation आणि least privilege roles ने सोपे. AKIA… keys commit करू नका; execution role ला policies.
मुलाखत card: Lambda मध्ये access keys ऐवजी IAM role का? · PNG download करा · Card page उघडा
मुलाखत card: Memory वाढवल्याने फक्त RAM मिळतो का?. नाही — memory वाढल्यावर CPU पण जास्त. CPU-bound handlers जास्त memory वर लवकर संपतात. 256 vs 1024 MB benchmark; स्वस्त GB-s निवडा.
मुलाखत card: Memory वाढवल्याने फक्त RAM मिळतो का? · PNG download करा · Card page उघडा

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