در این مقاله تلاش کرده‌ایم یک لایه لامبدا در پایتون به صورت ابتدایی بسازیم. به این منظور از فریمورک Serverless در پایتون 3 استفاده می‌کنیم. راه‌اندازی این فریمورک ساده، توزیع آن آسان و مستندات و راهنماهایی که برای آن عرضه شده، دائماً در حال افزایش است.

با این حال علی‌رغم همه مزیت‌های فوق یکی از نکات آزاردهنده مهم، توزیع فایل‌های zip بزرگ است، چون پکیج‌های پایتون گاهی بسیار بزرگ هستند. شاید بپرسید منظور از بزرگ چه مقدار بزرگ است؟

فرض کنید لازم است از NumPy استفاده کنید که یکی از پر دانلودترین پکیج‌های پایتون محسوب می‌شود. این پکیج در زمان استخراج از حالت فشرده حجمی در حدود 85 مگابایت دارد.

 لایه لامبدا در پایتون

فشرده‌سازی و توزیع تابع‌هایی که از این پکیج استفاده می‌کنند ممکن است بسیار بزرگ و کاری زمان‌بر باشد که زمان توسعه و توزیع را تا حدود زیادی کندتر می‌سازد.

راه‌حل: لایه‌ها

AWS در نوامبر 2018، «لایه‌های لامبدا» (Lambda Layers) را به عنوان یک روش برای حل این مشکل عرضه کرده است. لایه‌های لامبدا به عنوان روشی برای افراز کد با قابلیت استفاده مجدد به کامپوننت‌های مجزا فراهم می‌سازد. بدین ترتیب می‌توانید صرفاً تغییرات در تابع‌های لامبدای «منطق تجاری» (Business Logic) را توزیع کنید و موارد دیگر را که به ندرت تغییر پیدا می‌کنند و کد مشترکی مانند کتابخانه NumPy محسوب می‌شوند را در لایه‌ای مجزا نگهداری کنید.

در ادامه مثالی ارائه شده که نشان می‌دهد چگونه لایه‌ها می‌توانند کد مشترک را در تابع‌های لامبدا افراز کنند:

 لایه لامبدا در پایتون

بررسی مثال

در ادامه یک راهنمای گام به گام برای تبیین شیوه راه‌اندازی یک مثال کاربردی با استفاده از لایه‌های لامبدا ارائه شده است. برای مشاهده کد کامل آن به این صفحه گیت‌هاب (+) مراجعه کنید.

راه‌اندازی یک تابع ساده Serverless پایتون

یک سرویس Serverless پایتون 3 راه‌اندازی کرده و یک محیط مجازی برای آن ایجاد کنید:

 لایه لامبدا در پایتون

Numpy را نصب کنید:

 لایه لامبدا در پایتون

یک تابع hello ساده با استفاده از numpy در فایل handler.py ایجاد کنید:

این کد را به صورت لوکال تست کنید:

 لایه لامبدا در پایتون

اینک زمان توزیع فرا رسیده است، اما پیش از اقدام به توزیع کد باید میزان بزرگ بودن فایل zip را بررسی کنیم. بدین ترتیب یک مقدار ابتدایی برای مقایسه‌های آتی خواهیم داشت. پکیج serverless را اجرا کنید تا تابع را به صورت محلی zip کند و اندازه فایل zip را که قرار است توزیع شود بررسی کنید:

 لایه لامبدا در پایتون

در خروجی دستور فوق می‌بینیم که فایل کنونی فشرده دارای حجم 42 مگابایت است. این تابع را افراز می‌کنیم. اما پیش از آغاز به این کار باید در مورد چارچوب کار نیز توضیح بدهیم. در زمان نگارش این مقاله فریمورک Serverless نمی‌تواند عملاً لایه‌های را به صورت مجزا از هم توزیع کند. دلیل این مسئله یک محدودیت در CloudFormation است. بنابراین بهترین روش برای حل این مشکل آن است که لایه و تابع‌ها را در پشته‌های مجزایی نگهداری کنیم.

به همین دلیل بهترین رویه کنونی افراز کد به صورت زیر است:

محیط مجازی را غیرفعال کنید و به دایرکتوری root بروید. سپس یک پشته Serverless دیگر ایجاد کرده و این بار آن را sls-layers-python-requirements بنامید:

بدین ترتیب ساختار دایرکتوری زیر ایجاد می‌شود:

 لایه لامبدا در پایتون

در ادامه پکیج numpy را مجدداً مقداردهی و نصب می‌کنیم:

اکنون باید مطمئن شویم که پکیج‌های پایتون در پکیج توزیع ما بسته‌بندی شده‌اند. پلاگین erverless-python-requirements را به صورت زیر نصب می‌کنیم:

سپس serverless.yml را به صورت زیر به‌روزرسانی می‌کنیم:

و آن را توزیع می‌کنیم:

این کار کمی طول می‌کشد اما زمانی که انجام یابد، نتیجه‌ای مانند زیر مشاهده می‌کنید:

 لایه لامبدا در پایتون

در تصویر فوق می‌بینیم که خروجی لایه لامبدا ظاهر شده است. آن را کپی می‌کنیم و از آن در پشته sls-layers-python اصلی استفاده می‌کنیم. در این دایرکتوری فایل serverless.yaml را به صورت زیر به‌روزرسانی کنید:

سپس همانند قبل باید مطمئن شویم که بسته سرورلس ما می‌تواند همچنان در زمان توزیع به پکیج NumPy پایتون ارجاع دهد:

اکنون اندازه این پکیج جدید را پیش از انتظار برای یک توزیع 41 مگابایتی دیگر بررسی می‌کنیم. دستورهای زیر را اجرا کنید:

 لایه لامبدا در پایتون

چنان که می‌بینید اندازه آن 6.2 کیلوبایت است که بسیار بهتر شده است. این پکیج را با استفاده از دستور زیر توزیع می‌کنیم:

 لایه لامبدا در پایتون

اکنون که هم NumPy و هم منطق تجاری خود را توزیع کرده‌ایم، می‌توانیم این بسته را با اجرای دستور زیر تست کنیم:

 لایه لامبدا در پایتون

محدودیت‌های این روش کدام است؟

با این که این راه‌حل بهبود عظیمی در توزیع Serverless محسوب می‌شود اما چند مشکل نیز وجود دارند که باید از آن مطلع باشید. مهم‌ترین مشکل‌ها به شرح زیر هستند:

  • اندازه کلی پکیج توزیع (لایه‌های لامبدا و منطق تجاری) نمی‌تواند از 250 مگابایت در حالت نافشرده تجاوز کند.
  • حداکثر می‌توان پنج لایه لامبدا برای هر کارکرد استفاده کرد.

سخن پایانی

یکی از قابلیت‌های دیگر این روش امکان ارجاع به لایه‌ها از حساب‌های AWS دیگر است. به همین دلیل بسیاری از افراد و سازمان‌ها لایه‌های لامبدای خاص خود را در دسترس همه افراد برای استفاده قرار داده‌اند. لیستی از لایه لامبدای AWS را می‌توانید در این صفحه (+) ملاحظه کنید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

میثم لطفی (+)

«میثم لطفی» دانش‌آموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار نیز با مجله فرادرس همکاری دارد.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *