तुमची पहिली 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)
- Lambda → Create function → Author from scratch. Name:
discount-lab. Runtime: Python 3.12. Basic Lambda permissions सह नवीन role. - वरील Python handler paste → Deploy.
- Configuration → General configuration → Edit → Memory 256 MB, Timeout 10 s → Save. का: imports आणि JSON ला थोडी जागा.
- Configuration → Environment variables → Edit →
DEFAULT_DISCOUNT=0.1→ Save. Optional:os.environने वाचा. - Test → Event name
ten-percent, JSON:
{"price": 1000, "discount": 0.1}
- Test. अपेक्षित:
{"total": 900.0}. Result pane मधली billed duration बघा. - Monitor → View CloudWatch logs → latest stream → REPORT line मध्ये Duration आणि Memory Size.
- 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
- Function
discount-labdelete करा. - 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.
घरी करून बघा
- discount-lab Node.js 20.x मध्ये बनवा आणि CLI ने invoke करा.
- Test bucket वर s3:ListBucket permission देऊन function मधून list करा.
थोडक्यात सांगायचं तर
- Function बनवा → handler → Deploy → Test → logs बघा.
- Execution role = Lambda trust + code ला हव्या permissions.
- तोच logic Python, Node, Java, .NET, Go मध्ये जातो.
- Memory, timeout आणि env vars हे पहिले knobs.
सराव Tasks
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 दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Function invoke करा
का: Invoke function आत्ता चालवतो व उत्तर file मध्ये ठेवतो.
काय करायचं: sanglihaldi-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 थांबवतो.
काय करायचं: sanglihaldi-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 दाबा.
मध्यम Logs live पाहा
का: aws logs tail --follow म्हणजे CloudWatch Logs साठी tail -f.
काय करायचं: /aws/lambda/sanglihaldi-orders-fn log group live follow करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- 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 मध्ये.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Environment variables द्या
का: Table नावांसारख्या settings code बाहेर ठेवा.
काय करायचं: sanglihaldi-orders-fn वर environment variable TABLE=sanglihaldi-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 लागतो.
काय करायचं: sanglihaldi-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 दाबा.
अवघड 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 बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- 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 करावं.
- 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.