توابع مرحله AWS: ایجاد یک جریان “مشغول انتظار” برای منتظر ماندن برای اجرای موفقیت آمیز لامبدا.
سلام به همه، به این مقاله خوش آمدید. در چند روز گذشته، من مجبور شدم یک منطق در توابع AWS Step ایجاد کنم که شامل انتظار برای یک لامبدا بود که قبل از اینکه در جریان به جلو حرکت کند، athena را پرس و جو می کرد.
زمانی که در مورد منطق بحث میکردم، به نظر میرسید که انجام آن در چند دقیقه آسان است، اما از دانستن اینکه توابع مرحله تکنیک/راهحل اصلی خود را ندارد تا منتظر موفقیت یک حالت قبل از شروع حالت دیگر باشد، شگفتزده شدم. این باعث شد ساعت ها قبل از اینکه راه حلی پیدا کنم جستجو کنم.
در اینجا، من تکنیکی را با شما به اشتراک می گذارم که در آینده به شما کمک خواهد کرد.
اول از همه، من یک تابع لامبدا ساده ایجاد می کنم. تنها چیزی که باید از لامبدا بدانیم این است که آیا کار خود را انجام داده است یا خیر. بنابراین، این تابع ساده مطمئن می شود که وضعیت خود را باز می گرداند.
تابع لامبدا:
import json
def lambda_handler(event, context):
response = {
'status': 'success',
'message': 'Hello, World!'
}
return response
شما می توانید هم تابع و هم تعریف تابع Step را کپی کنید که در زیر به اشتراک می گذارم تا همه اینها را در محیط خود تکرار کنید.
اکنون، اجازه دهید پیش برویم و یک ماشین حالت در توابع مرحله AWS ایجاد کنیم.
روی “ایجاد ماشین حالت” کلیک کنید.
گزینه نوشتن تعریف خود را انتخاب کنید و “استاندارد” را انتخاب کنید.
حال در قسمت تعریف، تعریف زیر را کپی و پیست کنید.
تعریف توابع مرحله:
{
"Comment": "A Hello World example of the Amazon States Language using Pass states",
"StartAt": "Main",
"States": {
"Main": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:us-east-1:031342435657:function:stepfunctionlambda_test:$LATEST"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException",
"Lambda.TooManyRequestsException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Next": "WaitforInvocation"
},
"WaitforInvocation": {
"Type": "Wait",
"Seconds": 2,
"Next": "CheckInvocationsStatus"
},
"CheckInvocationsStatus": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"StringEquals": "success",
"Next": "Final"
}
],
"Default": "WaitforInvocation"
},
"Final": {
"Type": "Succeed"
}
}
}
تعریف را ذخیره کنید و روی next کلیک کنید.
نام ماشین حالت خود را مشخص کنید و سپس بقیه موارد را به عنوان پیش فرض بگذارید. اگر هیچ یک را مشخص نکنید، یک نقش اجرایی جدید ایجاد می شود.
آن را ذخیره کنید و سپس یک ماشین حالت ایجاد خواهید کرد که به شکل زیر است:
جریان بصری:
برای توضیح تعریف بالا، به نحوه عملکرد این ماشین حالت اشاره کردم:
-
ماشین حالت در حالت “اصلی” شروع می شود.
-
حالت “Main” یک وضعیت Task است که تابع Lambda مشخص شده توسط پارامتر “FunctionName” را فراخوانی می کند. ورودی تابع لامبدا کل ورودی است که به ماشین حالت داده می شود.
-
پارامتر “OutputPath” روی “$.Payload” تنظیم شده است تا خروجی تابع Lambda را بگیرد.
-
اگر فراخوانی تابع Lambda با استثناهای مشخصی که در بخش “تعداد مجدد” مشخص شده است (Lambda.ServiceException، Lambda.AWSLambdaException، Lambda.SdkClientException، Lambda.TooManyRequestsException) ناموفق باشد، ماشین حالت، 6 بار فراخوانی مجدد را مجدداً امتحان می کند. 2 ثانیه.
-
پس از فراخوانی تابع Lambda، ماشین حالت به حالت “WaitforInvocation” می رود.
-
حالت “WaitforInvocation” یک حالت انتظار است که اجرا را به مدت 2 ثانیه متوقف می کند.
-
پس از دوره انتظار، ماشین حالت به حالت “CheckInvocationsStatus” می رود.
-
وضعیت “CheckInvocationsStatus” یک حالت انتخابی است که مقدار فیلد “$.status” را در خروجی تابع Lambda بررسی می کند. اگر وضعیت “موفقیت” باشد، ماشین حالت به حالت “نهایی” می رود. در غیر این صورت، به حالت “WaitforInvocation” برمی گردد.
-
حالت “نهایی” یک حالت Succeed است که نشان دهنده تکمیل موفقیت آمیز ماشین حالت است.
حالا بیایید جلو برویم و آن را اجرا کنیم!
روی Start execution کلیک کنید و قسمت ورودی را خالی بگذارید.
در مورد لامبدا که نیاز به ورودی دارد، می توانید ورودی خود را به عنوان Json در اینجا وارد کنید
پس از شروع اجرای خود، هر حالت به رنگ های مختلفی تبدیل می شود که نشان دهنده موارد زیر است.
- سبز: نشان دهنده تکمیل موفقیت آمیز یک وضعیت یا مرحله است.
- قرمز: نشان دهنده خرابی یا خطای رخ داده در حین اجرای یک حالت یا مرحله است.
- زرد: نشان می دهد که یک حالت در حالت انتظار یا توقف است.
- آبی: نشان دهنده یک نقطه تصمیم یا انتخاب است که در آن ماشین حالت شرایط را برای تعیین وضعیت بعدی ارزیابی می کند.
- خاکستری: یک حالت غیرفعال را نشان می دهد که به سادگی ورودی را بدون انجام کار قابل توجهی به خروجی منتقل می کند.
- سفید: انتقال یا اتصالات بین حالت ها را نشان می دهد که جریان اجرا از یک حالت به حالت دیگر را نشان می دهد.
در نهایت اجرا به این صورت خواهد بود:
متشکرم. امیدواریم اکنون بتوانید ادامه دهید و منطق “مشغول انتظار” را در توابع مرحله خود اعمال کنید.