Ravindra BagaleCourses & study guides English

AWS SDK Step Functions आणि EventBridge: Workflows चालवा आणि Events Publish करा (Python, PHP, Node.js)

अनेक apps म्हणजे खरं तर workflows: order घ्या, card charge करा, माणसाची वाट पाहा, मग ship करा. Step Functions हे steps तुमच्यासाठी चालवतं, आणि EventBridge services मध्ये events व schedules पोहोचवतं. Python, PHP आणि Node.js मधून executions start करू व पाहू, task token ने वाट पाहणारा task पूर्ण करू, custom events publish करू आणि schedules बनवू. Example: Osaka मधली Aiko आणि जयपूरचा Rohan यांची travel agency.

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

  • State machine execution start
  • Status व output पाहा
  • Task token ने resume
  • PutEvents ने events
  • Schedules बनवा

1. मोठं चित्र: tour checklist

हे का लागतं?

Tour desk कडे checklist असते: hotel book, train book, guide चा होकार थांबा, tickets पाठवा. Manager प्रत्येक box tick करतो व hotel line busy असेल तर retry करतो. Step Functions तो manager. EventBridge हा notice board, जिथे कोणीही "booking confirmed" लावतो आणि योग्य teams react करतात.

हे काय आहे?

State machine Amazon States Language (JSON) मध्ये लिहिली जाते. StartExecution executionArn देतं; DescribeExecution RUNNING, SUCCEEDED किंवा FAILED status देतं. EventBridge PutEvents bus वर events पाठवतं; rules patterns match करून targets call करतात; EventBridge Scheduler cron किंवा rate ने targets चालवतो.

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

Booking ते ticketsApp StartExecution call करतंHotel व train tasks चालतातGuide ची वाट (task token)Guide app SendTaskSuccess call करतंPutEvents BookingConfirmed
Standard workflows वर्षभर थांबू शकतात; Express छोट्या, high-volume runs साठी.

2. Execution start करा

हे का लागतं?

Aiko ¥84,000 ची Kyoto trip book करते आणि customer ने पैसे भरताच workflow सुरू व्हावा अशी तिची इच्छा आहे.

हे काय आहे?

StartExecution stateMachineArn, optional unique name (duplicates थांबवतो) आणि JSON string input घेतं.

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

  1. Python.
import boto3, json
sf = boto3.client("stepfunctions", region_name="ap-northeast-1")
r = sf.start_execution(
    stateMachineArn="arn:aws:states:ap-northeast-1:111122223333:stateMachine:TripBooking",
    name="trip-kyoto-5012",
    input=json.dumps({"tripId": "5012", "amount": 84000, "currency": "JPY"}))
print(r["executionArn"].split(":")[-1])

अपेक्षित output:

trip-kyoto-5012
  1. Node.js.
import { SFNClient, StartExecutionCommand } from "@aws-sdk/client-sfn";
const sf = new SFNClient({ region: "ap-south-1" });
const r = await sf.send(new StartExecutionCommand({
  stateMachineArn: "arn:aws:states:ap-south-1:111122223333:stateMachine:TripBooking",
  name: "trip-jaipur-7731",
  input: JSON.stringify({ tripId: "7731", amount: 18500, currency: "INR" })
}));
console.log(r.executionArn.split(":").pop());

अपेक्षित output:

trip-jaipur-7731
  1. PHP.
<?php
require "vendor/autoload.php";
$sf = new Aws\Sfn\SfnClient(["region" => "eu-west-2"]);
$r = $sf->startExecution([
  "stateMachineArn" => "arn:aws:states:eu-west-2:111122223333:stateMachine:TripBooking",
  "name" => "trip-york-310",
  "input" => json_encode(["tripId" => "310", "amount" => 640, "currency" => "GBP"])]);
echo basename(str_replace(":", "/", $r["executionArn"])), PHP_EOL;

अपेक्षित output:

trip-york-310
  1. CLI ने verify.
aws stepfunctions list-executions --state-machine-arn arn:aws:states:ap-northeast-1:111122223333:stateMachine:TripBooking --max-results 1 --query "executions[0].name" --output text

अपेक्षित output:

trip-kyoto-5012

3. Status व output पाहा

हे का लागतं?

Workflow संपेपर्यंत Rohan customers ना "Booking in progress" दाखवतो.

हे काय आहे?

DescribeExecution status आणि SUCCEEDED झाल्यावर output (JSON string) देतं. Delay ने poll करा, किंवा EventBridge मधल्या Step Functions status event वर react करा.

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

  1. Python: संपेपर्यंत poll.
import time
arn = r["executionArn"]
while (d := sf.describe_execution(executionArn=arn))["status"] == "RUNNING":
    time.sleep(2)
print(d["status"], json.loads(d["output"])["ticket"])

अपेक्षित output:

SUCCEEDED KYO-5012-A
  1. Node.js.
import { DescribeExecutionCommand } from "@aws-sdk/client-sfn";
const d = await sf.send(new DescribeExecutionCommand({ executionArn: r.executionArn }));
console.log(d.status);

अपेक्षित output:

RUNNING
  1. PHP: failed कारण दाखवा.
$d = $sf->describeExecution(["executionArn" => $r["executionArn"]]);
echo $d["status"], " ", $d["error"] ?? "-", PHP_EOL;

अपेक्षित output:

FAILED HotelSoldOut
  1. CLI ने verify.
aws stepfunctions describe-execution --execution-arn arn:aws:states:ap-northeast-1:111122223333:execution:TripBooking:trip-kyoto-5012 --query status --output text

अपेक्षित output:

SUCCEEDED

4. Task token ने resume

हे का लागतं?

Tickets जाण्याआधी जयपूरच्या guide ने group स्वीकारायला हवा. Workflow थांबतो आणि त्याच्या tap ची वाट पाहतो.

हे काय आहे?

".waitForTaskToken" असलेला task $$.Task.Token (उदा.) SQS ला देतो. नंतर app त्या token सह SendTaskSuccess किंवा SendTaskFailure call करतं.

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

  1. Python: guide स्वीकारतो.
sf.send_task_success(taskToken=token, output=json.dumps({"guide": "Rohan", "accepted": True}))
print("resumed")

अपेक्षित output:

resumed
  1. Node.js: guide नकार देतो.
import { SendTaskFailureCommand } from "@aws-sdk/client-sfn";
await sf.send(new SendTaskFailureCommand({ taskToken: token, error: "GuideBusy", cause: "Festival week" }));
console.log("failed GuideBusy");

अपेक्षित output:

failed GuideBusy
  1. PHP: मोठी वाट चालू ठेवा.
$sf->sendTaskHeartbeat(["taskToken" => $token]);
echo "heartbeat sent", PHP_EOL;

अपेक्षित output:

heartbeat sent
  1. CLI ने verify.
aws stepfunctions get-execution-history --execution-arn arn:aws:states:ap-south-1:111122223333:execution:TripBooking:trip-jaipur-7731 --reverse-order --max-results 1 --query "events[0].type" --output text

अपेक्षित output:

ExecutionSucceeded

5. Events आणि schedules

हे का लागतं?

Booking confirm झाल्यावर Lyon ची invoice team (€1,250) व SMS team दोघांना कळायला हवं, आणि रोज सकाळी 9 ला reminders जायला हवेत.

हे काय आहे?

PutEvents 10 entries पर्यंत (Source, DetailType, Detail JSON) पाठवतं. Event pattern असलेला rule त्यांना targets कडे पाठवतो. EventBridge Scheduler CreateSchedule time zone सह cron/rate ने target चालवतो.

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

  1. Python: event publish.
eb = boto3.client("events", region_name="eu-west-3")
r = eb.put_events(Entries=[{"Source": "travel.bookings", "DetailType": "BookingConfirmed",
    "Detail": json.dumps({"tripId": "88", "amount": 1250, "currency": "EUR"}), "EventBusName": "default"}])
print("failed:", r["FailedEntryCount"])

अपेक्षित output:

failed: 0
  1. Node.js: rule व target.
import { EventBridgeClient, PutRuleCommand, PutTargetsCommand } from "@aws-sdk/client-eventbridge";
const eb = new EventBridgeClient({ region: "eu-west-3" });
await eb.send(new PutRuleCommand({ Name: "booking-confirmed",
  EventPattern: JSON.stringify({ source: ["travel.bookings"], "detail-type": ["BookingConfirmed"] }) }));
const t = await eb.send(new PutTargetsCommand({ Rule: "booking-confirmed",
  Targets: [{ Id: "sms", Arn: "arn:aws:sqs:eu-west-3:111122223333:sms-queue" }] }));
console.log("target failures:", t.FailedEntryCount);

अपेक्षित output:

target failures: 0
  1. PHP: रोजचा schedule.
$sc = new Aws\Scheduler\SchedulerClient(["region" => "ap-south-1"]);
$sc->createSchedule(["Name" => "trip-reminders", "ScheduleExpression" => "cron(0 9 * * ? *)",
  "ScheduleExpressionTimezone" => "Asia/Kolkata", "FlexibleTimeWindow" => ["Mode" => "OFF"],
  "Target" => ["Arn" => "arn:aws:sqs:ap-south-1:111122223333:reminders",
               "RoleArn" => "arn:aws:iam::111122223333:role/scheduler-sqs"]]);
echo "schedule created", PHP_EOL;

अपेक्षित output:

schedule created
  1. CLI ने verify.
aws scheduler get-schedule --name trip-reminders --region ap-south-1 --query ScheduleExpression --output text

अपेक्षित output:

cron(0 9 * * ? *)

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

हे का लागतं?

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

हे काय आहे?

प्रत्येक CLI command म्हणजे एक API call. उदा. aws stepfunctions start-execution ... म्हणजे StartExecution API.

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

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

StackCode
AWS CLIaws stepfunctions start-execution --state-machine-arn arn:aws:states:...:stateMachine:TripBooking --input '{"tripId":"5012"}'
Java v2sfn.startExecution(b -> b.stateMachineArn(arn).input("{\"tripId\":\"5012\"}"));
Go v2client.StartExecution(ctx, &sfn.StartExecutionInput{StateMachineArn: aws.String(arn), Input: aws.String(in)})
.NETawait sfn.StartExecutionAsync(new StartExecutionRequest { StateMachineArn = arn, Input = json });

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

हे का लागतं?

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

हे काय आहे?

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

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

  1. Schedule, rule targets व rule delete करा.
aws scheduler delete-schedule --name trip-reminders --region ap-south-1
aws events remove-targets --rule booking-confirmed --ids sms --region eu-west-3
aws events delete-rule --name booking-confirmed --region eu-west-3

अपेक्षित output:

(no output means success)
  1. Test state machine delete करा.
aws stepfunctions delete-state-machine --state-machine-arn arn:aws:states:ap-northeast-1:111122223333:stateMachine:TripBooking

अपेक्षित output:

(no output means success)

Ravindra Bagale's Tip

प्रत्येक execution ला trip-5012 सारखं business name द्या. तेच name व input असलेला दुसरा StartExecution ignore होतो, त्यामुळे retries double-booking करत नाहीत.

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

प्र. StartExecution काय देतं?

executionArn व startDate.

प्र. थांबलेला task कसा resume?

Task token सह SendTaskSuccess/Failure.

प्र. Standard vs Express?

Standard लांब; Express छोटे, स्वस्त.

प्र. PutEvents मध्ये किती entries?

10.

प्र. Rules vs Scheduler?

Rules events वर; Scheduler वेळेवर.

घरी करून बघा

  1. Paris, पुणे व Perth trips साठी 3 executions start करून final status print करणारी Python script लिहा.
  2. Node.js मध्ये BookingCancelled event publish करा आणि SQS queue ला पाठवणारा rule जोडा.

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

  1. Unique name सह StartExecution.
  2. Status साठी DescribeExecution.
  3. Task token माणसांसाठी थांबवतो.
  4. PutEvents + rules events पाठवतात.
  5. Scheduler cron ने चालतो.

सराव Tasks

या scenario बद्दल

Zurich Insurance Partners हा झुरिच मधला विमा व्यवसाय आहे. Anna Müller त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे CHF मध्ये मोजले जातात आणि AWS resources eu-central-2 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 12

सोपं Functions ची list

का: या Region मध्ये कोणते functions आहेत ते पाहा.

काय करायचं: eu-central-2 मधले Lambda functions दाखवा.

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

सोपं एक function invoke

का: Caller ने फक्त लागणारा function invoke करावा.

काय करायचं: फक्त arn:aws:lambda:eu-central-2:131130276334:function:zurichinsure-orders-fn वर lambda:InvokeFunction allow करा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम Scheduled rule बनवा

का: Schedule rule server शिवाय रोज job चालवतो.

काय करायचं: रोज 02:00 UTC ला चालणारा zurichinsure-nightly rule बनवा: cron(0 2 * * ? *).

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

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

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

काय करायचं: zurichinsure-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 invoke करा

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

काय करायचं: zurichinsure-orders-fn invoke करा व response out.json मध्ये ठेवा.

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

अवघड Rule Lambda कडे वळवा

का: Target शिवाय rule काही करत नाही.

काय करायचं: zurichinsure-nightly rule ला Id=1, Arn arn:aws:lambda:eu-central-2:131130276334:function:zurichinsure-cleanup target जोडा.

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

अवघड Custom event publish करा

का: Apps bus वर events टाकतात; rules कोण react करेल ते ठरवतात.

काय करायचं: events.json मधले events EventBridge वर टाका.

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

अवघड Step Functions: दोन tasks

का: State machine steps क्रमाने चालवतं.

काय करायचं: ASL JSON: StartAt Validate; Validate Task → Next Charge; Charge Task, End true.

कसं करायचं:
  1. Task मधल्या top-level keys पासून सुरू करा.
  2. Child keys 2 spaces ने indent करा (tabs नकोत).
  3. प्रत्येक property मध्ये task मधली value भरा.
  4. Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.

अवघड 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 function बनवा

का: Lambda ला code zip, runtime, handler नाव व execution role लागतो.

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

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

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

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

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

Step Functions. StartExecution executionArn देतो. Unique name duplicates थांबवतं. Status साठी DescribeExecution. Task token: SendTaskSuccess.
उजळणी card: Step Functions · PNG download करा · Card page उघडा
EventBridge events. PutEvents: 10 entries पर्यंत. FailedEntryCount तपासा. Rules event patterns match. Cron साठी Scheduler.
उजळणी card: EventBridge events · PNG download करा · Card page उघडा
Standard vs Express. History सह durable workflow. / जलद, high-volume workflow.
तुलना: Standard vs Express · PNG download करा · Card page उघडा
ExecutionAlreadyExists?. तेच name, वेगळा input. Names 90 दिवस unique. नव्या runs ला suffix.
मुलाखत card: ExecutionAlreadyExists? · PNG download करा · Card page उघडा

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