Ravindra BagaleCourses & study guides English

AWS CLI Lambda Commands: Functions बनवा, Invoke आणि Update करा

Servers शिवाय code चालवू: execution role, zip मधून function, invoke, update, environment variables, versions, aliases आणि logs.

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

  • Execution role बनवा
  • Function बनवा आणि invoke
  • Code आणि configuration update
  • Versions आणि aliases
  • Logs वाचा आणि delete

1. मोठं चित्र: बोलावल्यावर code

हे का लागतं?

Call वर electrician: येऊन काम केलं तेवढेच पैसे. Lambda event आला तरच code चालवतो, milliseconds नुसार bill.

हे काय आहे?

Commands aws lambda मध्ये: create-function, invoke, update-function-code, publish-version, create-alias.

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

Function workflowlambda साठी IAM rolezip → create-functioninvoke, output वाचाcode / config updatepublish-version → alias
Function काय touch करू शकतो ते role ठरवतो.

2. Execution role

हे का लागतं?

Function ला logs लिहायला आणि इतर services call करायला permission हवी.

हे काय आहे?

lambda.amazonaws.com assume करू शकेल असा role, CloudWatch Logs साठी AWSLambdaBasicExecutionRole.

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

  1. Role बनवा.
ROLE=$(aws iam create-role --role-name cli-lambda-role --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"},"Action":"sts:AssumeRole"}]}' --query Role.Arn --output text)
aws iam attach-role-policy --role-name cli-lambda-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
echo $ROLE

अपेक्षित output:

arn:aws:iam::111122223333:role/cli-lambda-role

3. बनवा आणि invoke करा

हे का लागतं?

Server न बनवता छोटा code काही seconds मध्ये test.

हे काय आहे?

create-function runtime, handler, role सह zip upload करतो. invoke चालवून response file मध्ये.

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

  1. Code लिहून zip.
cat > app.py <<'P'
def handler(event, context):
    return {"msg": "hello " + event.get("name", "world")}
P
zip fn.zip app.py

अपेक्षित output:

  adding: app.py (deflated 12%)
  1. Function बनवा.
aws lambda create-function --function-name cli-hello --runtime python3.12 --handler app.handler --role $ROLE --zip-file fileb://fn.zip --query State --output text
aws lambda wait function-active-v2 --function-name cli-hello

अपेक्षित output:

Pending
  1. Invoke.
aws lambda invoke --function-name cli-hello --cli-binary-format raw-in-base64-out --payload '{"name":"Pune"}' out.json --query StatusCode
cat out.json

अपेक्षित output:

200
{"msg": "hello Pune"}

4. Code आणि configuration update

हे का लागतं?

Bug fix केला, आणि code न बदलता table name सारखी setting हवी.

हे काय आहे?

update-function-code नवीन zip. update-function-configuration memory, timeout, environment variables बदलतो.

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

  1. नवीन code.
zip fn.zip app.py
aws lambda update-function-code --function-name cli-hello --zip-file fileb://fn.zip --query LastUpdateStatus --output text
aws lambda wait function-updated-v2 --function-name cli-hello

अपेक्षित output:

InProgress
  1. Memory, timeout, env var.
aws lambda update-function-configuration --function-name cli-hello --memory-size 256 --timeout 10 --environment "Variables={STAGE=dev}" --query "[MemorySize,Timeout]" --output text

अपेक्षित output:

256  10

5. Versions, aliases आणि logs

हे का लागतं?

Test करताना production बदलू नये. Fail झालं तर logs हवेत.

हे काय आहे?

publish-version code 1, 2, 3 म्हणून freeze करतो. prod सारखा alias version ला point. Logs /aws/lambda/NAME मध्ये.

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

  1. Publish आणि alias.
V=$(aws lambda publish-version --function-name cli-hello --query Version --output text)
aws lambda create-alias --function-name cli-hello --name prod --function-version $V --query AliasArn --output text

अपेक्षित output:

arn:aws:lambda:ap-south-1:111122223333:function:cli-hello:prod
  1. Logs live बघा.
aws logs tail /aws/lambda/cli-hello --since 10m --follow

अपेक्षित output:

START RequestId: 3f2a... Version: 1
END RequestId: 3f2a...
REPORT ... Duration: 1.52 ms  Billed Duration: 2 ms
  1. S3 ला function call करू द्या.
aws lambda add-permission --function-name cli-hello --statement-id s3invoke --action lambda:InvokeFunction --principal s3.amazonaws.com --source-arn arn:aws:s3:::my-bucket --query Statement --output text

अपेक्षित output:

{"Sid":"s3invoke","Effect":"Allow",...}

6. हीच action Python, Node.js, Java, Go, .NET आणि PHP मध्ये

हे का लागतं?

Scripts CLI मध्ये सुरू होतात. Apps तोच API SDK मधून call करतात. दोन्ही माहीत असले की test केलेली command थेट code मध्ये नेता येते.

हे काय आहे?

प्रत्येक CLI command म्हणजे एक API call. उदा. aws lambda invoke --function-name cli-hello out.json म्हणजे Invoke API.

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

हीच action (Invoke) code मधून. प्रत्येक SDK CLI सारखेच profile, region आणि credentials वाचतो.

StackCode
Python (boto3)boto3.client("lambda").invoke(FunctionName="cli-hello",Payload=b'{"name":"Pune"}')["Payload"].read()
Node.js (v3)await lambda.send(new InvokeCommand({FunctionName:"cli-hello",Payload:Buffer.from('{"name":"Pune"}')}));
Java (v2)lambda.invoke(r -> r.functionName("cli-hello").payload(SdkBytes.fromUtf8String("{}")));
Go (v2)c.Invoke(ctx, &lambda.InvokeInput{FunctionName: aws.String("cli-hello"), Payload: []byte(`{}`)})
.NETawait lambda.InvokeAsync(new InvokeRequest{FunctionName="cli-hello",Payload="{}"});
PHP$lambda->invoke(["FunctionName"=>"cli-hello","Payload"=>"{}"]);

7. काहीही खर्च चालू राहू नये म्हणून cleanup

हे का लागतं?

चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.

हे काय आहे?

उलट्या क्रमाने delete करा: आधी children, मग parents.

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

  1. Function delete (versions, aliases सोबत).
aws lambda delete-function --function-name cli-hello

अपेक्षित output:

(no output means success)
  1. Log group delete.
aws logs delete-log-group --log-group-name /aws/lambda/cli-hello

अपेक्षित output:

(no output means success)
  1. Role delete.
aws iam detach-role-policy --role-name cli-lambda-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
aws iam delete-role --role-name cli-lambda-role

अपेक्षित output:

(no output means success)
  1. Verify.
aws lambda get-function --function-name cli-hello

अपेक्षित output:

An error occurred (ResourceNotFoundException) ...

Ravindra Bagale's Tip

AWS CLI v2 मध्ये --payload default base64. --cli-binary-format raw-in-base64-out द्या, नाहीतर Invalid base64 error.

8. मुलाखत प्रश्न आणि उत्तरं

प्र. Execution role काय?

Code चालवताना Lambda assume करतो तो role.

प्र. Version vs alias?

Version freeze; alias हलणारं नाव.

प्र. Sync vs async?

RequestResponse वाट बघतो; Event 202.

प्र. add-permission का?

दुसऱ्या service ला invoke करू देणारी resource policy.

प्र. Logs कुठे?

/aws/lambda/FUNCTION.

घरी करून बघा

  1. STAGE env var return करणारा function बनवा, बदलून परत invoke.
  2. दोन versions publish करून prod alias बदला.

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

  1. आधी role.
  2. Zip सह create-function.
  3. raw-in-base64-out.
  4. publish-version + alias.
  5. aws logs tail.

सराव 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 दाबा.

मध्यम 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 दाबा.

मध्यम Logs live पाहा

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

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

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

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

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

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

Lambda बनवा. Server शिवाय गरज तेव्हाच code. lambda.amazonaws.com trust करणारा role. --zip-file fileb://fn.zip. invoke ला raw-in-base64-out.
उजळणी card: Lambda बनवा · PNG download करा · Card page उघडा
Versions आणि aliases. Testing ने production बदलू नये. publish-version freeze. Alias version ला point. Settings: update-function-configuration. aws logs tail /aws/lambda/NAME.
उजळणी card: Versions आणि aliases · PNG download करा · Card page उघडा
RequestResponse vs Event. Result ची वाट. / लगेच 202.
तुलना: RequestResponse vs Event · PNG download करा · Card page उघडा
Lambda version vs alias?. Version = freeze numbered code. Alias = prod सारखा हलणारा pointer. Alias जुन्या version ला करून rollback.
मुलाखत card: Lambda version vs alias? · PNG download करा · Card page उघडा

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