AWS اکنون اجازه می‌دهد توابع و لایه‌های Lambda بسته‌های استقرار را مستقیماً از یک باکت S3 متعلق به مشتری ارجاع دهند، به‌جای آنکه بسته‌ها در فضای ذخیره‌سازی مدیریت‌شده Lambda نگهداری شوند. این تغییر سقف تجمعی ذخیره‌سازی کد در سطح حساب را حذف می‌کند و مقدار پیش‌فرض ذخیره‌سازی مدیریت‌شده Lambda را از 75 گیگابایت به 300 گیگابایت افزایش می‌دهد.

تغییر اصلی

محل نگهداری بسته‌های استقرار از فضای مدیریت‌شده Lambda به باکت S3 مشتری منتقل شده است. تیم‌هایی با ناوگان بزرگ توابع دیگر نیازی به درخواست افزایش سهمیه ذخیره‌سازی در هر منطقه ندارند. برای مرجع بیشتر درباره S3 و Lambda می‌توان به منابع رسمی و عمومی مراجعه کرد: ویکی‌پدیا — Amazon S3 و سند رسمی AWS Lambda.

محدودیت‌های اندازه هر تابع

این قابلیت سقف اندازه هر بسته تابع را تغییر نمی‌دهد. محدودیت‌های فعلی همچنان برقرارند:

  • 50 مگابایت برای بسته‌های zip‌شده (فشرده)
  • 250 مگابایت پس از استخراج برای بسته‌های zip
  • 10 گیگابایت برای ایمیج‌های کانتینری

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

تأثیر عملیاتی: حذف کپی واسطه و تسریع فعال‌سازی

با ارجاع مستقیم به شیء در باکت S3، Lambda دیگر نسخه‌ای میانی از بسته را در فضای مدیریت‌شده ایجاد نمی‌کند. این رویکرد می‌تواند زمان فعال‌سازی یا به‌روزرسانی تابع را کاهش دهد و چندین عملیات خواندن/نوشتن اضافی را حذف کند. داریل راگلز، از فعالان حوزه سرورلس، این تفاوت را مورد توجه قرار داده است.

مدیریت کد Lambda در باکت S3 مشتری

هزینه‌ها

هزینه‌های ذخیره و بازیابی اکنون در صورتحساب S3 مشتری قابل مشاهده است. به‌جز هزینه‌های استاندارد S3 و احتمالی انتقال بین مناطق، فعلاً هزینه اضافه‌ای از سمت Lambda برای این قابلیت دریافت نمی‌شود. تیم‌ها باید صورتحساب S3 را برای دنبال کردن هزینه‌های جدید نظارت کنند.

روند استقرار و ابزارهای IaC

روند کلی استقرار تغییر نکرده است: حتی زمانی که شیء در باکت جایگزین می‌شود، باید فراخوان UpdateFunctionCode اجرا شود تا Lambda به نسخه جدید اشاره کند. به عبارت دیگر، باکت به‌طور «زنده» کد را منتشر نمی‌کند؛ ارجاع در زمان به‌روزرسانی تنظیم می‌شود.

پشتیبانی ابزارهای Infrastructure-as-Code هنوز کامل نیست. مثلاً در provider Terraform درخواست افزودن ویژگی s3_object_storage_mode به منبع aws_lambda_function ثبت شده و هنوز پیاده‌سازی نشده است. تیم‌هایی که به Terraform وابسته‌اند یا باید منتظر بمانند یا از CLI و SDKهای AWS استفاده کنند. وضعیت پیگیری در مخزن رسمی: Terraform Provider AWS — Issues.

نکات عملی برای تیم‌های سرورلس

  • برای افزایش سقف تجمعی ذخیره‌سازی، این ویژگی مناسب است؛ اما برای عبور از محدودیت اندازه هر بسته راه‌حل‌های دیگری لازم است (ایمیج کانتینری، تفکیک کد و داده و غیره).
  • صورتحساب S3 را برای مشاهده هزینه‌های ذخیره و بازیابی فعال کنید و روند مصرف را پایش کنید.
  • بعد از جایگزینی شیء در باکت، حتماً UpdateFunctionCode یا معادل آن را اجرا کنید تا Lambda به نسخه جدید اشاره کند.
  • اگر از Terraform استفاده می‌کنید، به‌عنوان راه‌حل موقت از CLI یا SDKهای AWS بهره ببرید تا زمانی که provider به‌روزرسانی شود.

قابلیت ذخیره‌سازی کد خودمدیریت Lambda هم‌اکنون در همه مناطق تجاری AWS فعال است. تا اعلام تغییر هزینه‌ای از سوی AWS، این قابلیت هزینه Lambda اضافه‌ای در پی ندارد؛ با این حال معماران باید ترکیب هزینه، عملکرد و محدودیت‌های اندازه را بررسی کرده و تصمیم بگیرند آیا این روش برای فرایندهای استقرارشان مناسب است یا خیر.