AWS Serverless: عملکرد Lambda را به صورت ناهمزمان فراخوانی کنید و از مقصد برای رویدادهای ناموفق استفاده کنید

از مقالات قبلی من، چندین روش برای استفاده از توابع لامبدا بدون سرور AWS، هم برای ادغام مبتنی بر API در موارد استفاده از هوش مصنوعی غیر مولد و هم برای موارد استفاده از هوش مصنوعی مولد که با Amazon Bedrock ادغام شدهاند، دیدهاید. در تمام این مثالها، من از فراخوانی همزمان برای ادغام لامبدا استفاده کردم.
در این مقاله، بیایید فراخوانی ناهمزمان پشتیبانی شده توسط AWS Lambda را بررسی کنیم. هنگامی که به صورت ناهمزمان فراخوانی می شود، لامبدا یک کد وضعیت 202 را برمی گرداند، که نشان می دهد تماس با موفقیت انجام شده است و رویداد برای پردازش ناهمزمان ارسال شده است. با این حال، برنامه ریزی برای نظارت و مدیریت مراحل پردازش بعدی مهم است. بسته به مورد استفاده شما، ممکن است لازم باشد ردیابی کنید که آیا پردازش با موفقیت انجام شده است یا اینکه شکست خورده است.
به عنوان مثال، یک برنامه دفترچه آدرس را در نظر بگیرید که در آن یک رکورد آدرس جدید با استفاده از تماس ناهمزمان اضافه می کنید. در حالی که Lambda ممکن است با موفقیت داده ها را برای پردازش به باطن ارسال کند، این عملیات ممکن است در مراحل بعدی با شکست مواجه شود. در چنین مواردی، شما می خواهید از شکست مطلع شوید. یکی از رویکردهای موثر پیکربندی مقصد لامبدا برای ثبت رویدادهای ناموفق است.
در نوامبر 2019، AWS پشتیبانی از مقاصد در لامبدا را معرفی کرد. این ویژگی به شما امکان می دهد مکان ارسال نتایج فراخوان را انتخاب کنید، از جمله مقاصدی مانند تابع Lambda دیگر، SQS، SNS، یا EventBridge.
اخیراً، در نوامبر 2024، AWS از استفاده از S3 به عنوان مقصد رویدادهای ناموفق پشتیبانی می کند. این بهبود به شما امکان می دهد یک سطل S3 را مشخص کنید که در آن همه رویدادهای ناموفق برای تجزیه و تحلیل بیشتر ذخیره شوند.
در این مقاله، نحوه پیکربندی S3 را به عنوان مقصدی برای رویدادهای ناموفق در هنگام فراخوانی یک تابع AWS Lambda به صورت ناهمزمان بررسی خواهیم کرد.
بیایید به نمودار معماری نگاه کنیم!
بررسی عملکرد Lambda – سلام از Lambda!
هدف اصلی این مقاله نشان دادن نحوه عملکرد مقاصد برای توابع AWS Lambda با تمرکز خاص بر پیکربندی یک سطل S3 به عنوان مقصدی برای رویدادهای ناموفق است. برای ساده نگه داشتن آن، تابع Lambda یک مثال اولیه “Hello, World” را پیاده سازی می کند که یک “Hello from Lambda!” پیام این تابع خط پایه به عنوان پایه ای برای نشان دادن ویژگی مقصد عمل می کند.
برای این بررسی، من از کنسول مدیریت AWS برای ایجاد تابع و سپس اضافه کردن پیکربندی مقصد استفاده خواهم کرد.
به کنسول مدیریت AWS برای توابع Lambda بروید و روی Create Function کلیک کنید.
مطابق شکل زیر یک تابع به نام HelloWorldGB ایجاد کنید.
برای این تابع، من از Python Runtime 3.13 استفاده می کنم.
کد نمونه در تصویر زیر نشان داده شده است.
این نما از ویرایشگر کد Lambda به روز شده است. اگر با این کنسول آشنایی ندارید، ویدیوی من را ببینید که نحوه ساخت یک تابع Lambda با استفاده از ویرایشگر جدید و الگوهای SAM را توضیح می دهد. لینک ویدیو در توضیحات موجود است.
یک مقصد اضافه کنید – سطل S3
از کنسول Lambda، یک مقصد اضافه کنید. این مقصد برای ذخیره وقایع در صورت خرابی پیکربندی خواهد شد. توجه داشته باشید که مقصدها را میتوان برای رویدادهای On Success و On Failure پیکربندی کرد.
برای این مورد استفاده، من فقط آن را برای سناریوهای شکست پیکربندی می کنم.
در منوی کشویی، گزینه های مقصد مختلفی را مشاهده خواهید کرد، از جمله:
- SNS
- SQS
- یکی دیگر از عملکردهای لامبدا
- رویداد پل
- سطل S3
برای این مثال، S3 Bucket را به عنوان مقصد انتخاب می کنم.
اطمینان حاصل کنید که تابع Lambda دارای مجوزهای لازم برای نوشتن اشیاء در سطل S3 است. بدون این مجوز، زمانی که تابع سعی می کند رویدادها را در سطل مقصد بنویسد، با خطا مواجه می شوید.
برای افزایش استثنا در Lambda کد اضافه کنید
از آنجایی که مقصد برای سناریوهای خرابی پیکربندی شده است، تنها زمانی رویدادها را ثبت میکند که تابع Lambda با خطا مواجه شود. برای آزمایش این، من کد را بهروزرسانی میکنم تا عمداً یک استثنا ایجاد کند و اطمینان حاصل شود که عملکرد از کار میافتد و یک رویداد واجد شرایط ایجاد میکند.
پس از انجام این تغییر تابع Lambda را فراخوانی کنید. با توجه به استثناء اجباری، همانطور که در تصویر زیر نشان داده شده است، باید یک پیام خطا مشاهده کنید.
گزارش CloudWatch را مرور کنید
در مرحله بعد، گزارش های CloudWatch را مرور کنید. از آنجایی که تابع Lambda فراخوانی شده است، یک گروه گزارش CloudWatch ایجاد خواهد شد. گزارش ها حاوی جزئیات مربوط به فراخوانی، از جمله خطا هستند.
سطل مقصد S3 را مرور کنید
به سطل S3 که به عنوان مقصد پیکربندی کرده اید بروید و بررسی کنید که آیا رویداد ناموفق در آنجا پست شده است یا خیر.
همانطور که می بینید، در حالی که تابع lambda فراخوانی شد و یک خطا ایجاد کرد، رویداد ناموفق در سطل s3 مقصد ثبت نمی شود.
دلیل این امر این است که تابع مقصد فقط زمانی کار می کند که تابع Lambda به صورت ناهمزمان فراخوانی شود. هنگامی که تابع به طور همزمان فراخوانی می شود کار نخواهد کرد.
لامبدا را با استفاده از AWS CLI فراخوانی کنید
یک تابع Lambda را می توان به صورت ناهمزمان از طریق ادغام های مختلف سرویس AWS، مانند EventBridge یا S3 فراخوانی کرد. در دستور مثال زیر، نحوه فراخوانی ناهمزمان آن را با استفاده از دستور AWS CLI نشان میدهم:
'aws lambda invoke \
–function-name arn:aws:lambda:us-east-1:24xxxxxxxx7:function:HelloWorldGB \
-رویداد نوع فراخوان \
–cli-binary-format raw-in-base64-out \
–payload '{ “name”: “GB” }' \
–region us-east-1 \
پاسخ.جیسون
نتیجه/پاسخ
{
“کد وضعیت”: 202
}`
سطل Destination S3 را دوباره مرور کنید
اکنون که نتیجه کد وضعیت 202 را نشان می دهد، نشان می دهد که تماس ناهمزمان با لامبدا موفقیت آمیز بوده است. اکنون برای بررسی نتایج به سطل S3 مقصد برمی گردم.
همانطور که در تصویر سطل S3 در زیر نشان داده شده است، سطل مقصد اکنون حاوی رویداد ناموفق ثبت شده است. این رویداد را می توان برای شناسایی و درک علت شکست بیشتر تجزیه و تحلیل کرد.
پاکسازی – عملکرد Lambda و سطل S3 را حذف کنید
پس از تکمیل تنظیمات، مطمئن شوید که عملکرد Lambda را حذف کرده اید تا از استفاده غیر ضروری از منابع جلوگیری کنید. علاوه بر این، سطل S3 و گروه گزارش CloudWatch را حذف کنید. اگر در طول فرآیند نقش جدیدی ایجاد کردید، به یاد داشته باشید که آن ها را نیز حذف کنید.
نتیجه گیری
در این مقاله، نحوه پیکربندی S3 به عنوان مقصدی برای تابع Lambda را نشان دادم.
علاوه بر این، نحوه فراخوانی تابع لامبدا را به صورت ناهمزمان با استفاده از دستور AWS CLI نشان دادم.
امیدوارم این مقاله برای شما مفید و آموزنده بوده باشد!
با تشکر از شما برای خواندن!
ویدیو را اینجا ببینید:
https://www.youtube.com/watch?v=QqZspZoOYsY
https://www.youtube.com/watch?v=QqZspZoOYsY
𝒢𝒾𝓇𝒾𝓈𝒽 ℬ𝒽𝒶𝓉𝒾𝒶
𝘈𝘞𝘚 𝘊𝘦𝘳𝘵𝘪𝘧𝘪𝘦𝘥 𝘚 𝘈𝘳𝘤𝘩𝘪𝘵𝘦𝘤𝘵 و 𝘋𝘦𝘷𝘦𝘭𝘰
𝘊𝘭𝘰𝘶𝘥 𝘛𝘦𝘤𝘩𝘯𝘰𝘭𝘰𝘨