تجزیه و تحلیل دقیق AWS Lambda

ترجمه مقاله به طور اختصاصی برای دانشجویان دوره تهیه شده است "خدمات ابری". علاقه مند به توسعه در این مسیر هستید؟ تماشای کلاس کارشناسی ارشد توسط Egor Zuev (TeamLead در InBit) "سرویس AWS EC2" و به گروه دوره بعدی بپیوندید: از 26 شهریور شروع می شود.

تجزیه و تحلیل دقیق AWS Lambda

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

AWS لامبدا

AWS Lambda یک سرویس محاسباتی بدون سرور مبتنی بر رویداد است که به شما امکان می‌دهد کد را بدون تهیه یا مدیریت سرورها اجرا کنید و سایر خدمات AWS را با استفاده از منطق سفارشی گسترش دهید. Lambda به طور خودکار به رویدادهای مختلف (به نام محرک) پاسخ می دهد، مانند درخواست های HTTP از طریق دروازه API آمازون، تغییرات داده ها در سطل های آمازون S3 یا جداول DynamoDB آمازون. یا می توانید کد خود را از طریق تماس های API با استفاده از AWS SDK و انتقال حالت در توابع مرحله AWS اجرا کنید.

Lambda کد را بر روی یک زیرساخت محاسباتی بسیار در دسترس اجرا می کند و مسئولیت کامل مدیریت پلتفرم زیربنایی، از جمله نگهداری سرور و سیستم عامل، تامین منابع، مقیاس خودکار، نظارت بر کد، و ثبت نام را بر عهده دارد. یعنی فقط باید کد خود را آپلود کنید و نحوه و زمان اجرای آن را پیکربندی کنید. به نوبه خود، این سرویس از راه اندازی آن مراقبت می کند و در دسترس بودن برنامه شما را تضمین می کند.

چه زمانی به لامبدا تغییر دهید؟

AWS Lambda یک پلت فرم محاسباتی مناسب است که برای موارد مختلف مناسب است، تا زمانی که زبان و زمان اجرای کد شما توسط سرویس پشتیبانی شود. اگر می‌خواهید روی کد و منطق کسب‌وکار خود تمرکز کنید و در عین حال برون‌سپاری نگهداری، تأمین و مقیاس‌بندی سرور با هزینه‌ای معقول را انجام دهید، قطعاً AWS Lambda راهی برای رفتن است.

Lambda برای ایجاد رابط های برنامه نویسی ایده آل است، و زمانی که در ارتباط با API Gateway استفاده می شود، می توانید هزینه ها را به میزان قابل توجهی کاهش دهید و سریعتر وارد بازار شوید. راه های مختلفی برای استفاده از توابع و گزینه های Lambda برای سازماندهی معماری بدون سرور وجود دارد - هرکسی می تواند بر اساس هدف خود چیزی مناسب را انتخاب کند.

Lambda به شما اجازه می دهد تا طیف گسترده ای از وظایف را انجام دهید. بنابراین، به لطف پشتیبانی CloudWatch، می‌توانید وظایف معوق ایجاد کنید و فرآیندهای فردی را خودکار کنید. هیچ محدودیتی در ماهیت و شدت استفاده از سرویس وجود ندارد (مصرف حافظه و زمان در نظر گرفته می شود) و هیچ چیز مانع از کار سیستماتیک شما بر روی یک میکروسرویس کامل مبتنی بر لامبدا نمی شود.

در اینجا می توانید اقدامات سرویس گرا را ایجاد کنید که به طور مداوم اجرا نمی شوند. یک مثال معمولی مقیاس گذاری تصویر است. حتی در مورد سیستم های توزیع شده، عملکردهای لامبدا مرتبط باقی می مانند.

بنابراین، اگر نمی‌خواهید با تخصیص و مدیریت منابع محاسباتی سر و کار داشته باشید، AWS Lambda را امتحان کنید. اگر به محاسبات سنگین و پر منابع نیاز ندارید، AWS Lambda را نیز امتحان کنید. اگر کد شما به صورت دوره ای اجرا می شود، درست است، باید AWS Lambda را امتحان کنید.

امنیت

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

مانند بسیاری از خدمات AWS، Lambda بر اساس امنیت مشترک و انطباق بین AWS و مشتری ارائه می شود. این اصل بار عملیاتی را بر روی مشتری کاهش می دهد، زیرا AWS وظایف نگهداری، مدیریت و نظارت بر اجزای خدمات را بر عهده می گیرد - از سیستم عامل میزبان و لایه مجازی سازی تا امنیت فیزیکی دارایی های زیرساخت.

به طور خاص در مورد AWS Lambda، AWS مسئول مدیریت زیرساخت اصلی، خدمات زیربنایی مرتبط، سیستم عامل و پلت فرم برنامه است. در حالی که مشتری مسئول امنیت کد خود، ذخیره داده های محرمانه، کنترل دسترسی به آن، و همچنین سرویس و منابع لامبدا (مدیریت هویت و دسترسی، IAM)، از جمله در محدوده توابع مورد استفاده است.

نمودار زیر مدل مسئولیت مشترک را همانطور که در AWS Lambda اعمال می شود نشان می دهد. مسئولیت AWS نارنجی و مسئولیت مشتری آبی است. همانطور که می بینید، AWS مسئولیت بیشتری در قبال برنامه های مستقر در سرویس بر عهده می گیرد.

تجزیه و تحلیل دقیق AWS Lambda

مدل مسئولیت مشترک قابل اجرا برای AWS Lambda

زمان اجرا لامبدا

مزیت اصلی لامبدا این است که با انجام یک عملکرد از طرف شما، خود سرویس منابع لازم را تخصیص می دهد. می توانید از اتلاف وقت و تلاش برای مدیریت سیستم جلوگیری کنید و بر منطق تجاری و کدنویسی تمرکز کنید.

سرویس لامبدا به دو هواپیما تقسیم می شود. اولی هواپیمای کنترل است. طبق ویکی پدیا، هواپیمای کنترل بخشی از شبکه است که مسئول انتقال ترافیک سیگنالینگ و مسیریابی است. این مؤلفه اصلی است که تصمیمات جهانی را در مورد تأمین، سرویس و توزیع بار کاری می گیرد. علاوه بر این، صفحه کنترل به عنوان توپولوژی شبکه ارائه دهنده راه حل عمل می کند و مسئول مسیریابی و مدیریت ترافیک است.

صفحه دوم صفحه داده است. این هواپیما مانند هواپیمای کنترل وظایف خاص خود را دارد. صفحه کنترل API هایی را برای مدیریت توابع (CreateFunction، UpdateFunctionCode) ارائه می دهد و نحوه ارتباط Lambda با سایر سرویس های AWS را کنترل می کند. صفحه داده Invoke API را کنترل می کند که توابع Lambda را اجرا می کند. پس از فراخوانی یک تابع، صفحه کنترل یک محیط زمان اجرا موجود را که از قبل برای آن تابع آماده شده است اختصاص داده یا انتخاب می کند و سپس کد را در آن اجرا می کند.

AWS Lambda از انواع زبان های برنامه نویسی، از جمله Java 8، Python 3.7، Go، NodeJS 8، .NET Core 2 و سایر زبان ها از طریق محیط های زمان اجرا مربوطه پشتیبانی می کند. AWS به طور منظم آنها را به روز می کند، وصله های امنیتی را توزیع می کند و سایر فعالیت های تعمیر و نگهداری را در این محیط ها انجام می دهد. Lambda به شما امکان می دهد از زبان های دیگر نیز استفاده کنید، البته به شرطی که خودتان زمان اجرا مناسب را پیاده سازی کنید. و سپس باید مراقب نگهداری آن، از جمله نظارت بر ایمنی آن باشید.

همه اینها چگونه کار می کند و سرویس چگونه عملکردهای شما را انجام می دهد؟

هر تابع در یک یا چند محیط اختصاصی اجرا می شود که فقط برای عمر آن تابع وجود دارد و سپس از بین می رود. هر محیط فقط یک تماس در یک زمان برقرار می کند، اما اگر چندین تماس سریال برای یک تابع وجود داشته باشد، مجددا استفاده می شود. همه محیط‌های زمان اجرا بر روی ماشین‌های مجازی با مجازی‌سازی سخت‌افزار اجرا می‌شوند - به اصطلاح microVM. هر microVM به یک حساب AWS خاص اختصاص داده می شود و می تواند توسط محیط ها برای انجام عملکردهای مختلف در آن حساب مورد استفاده مجدد قرار گیرد. MicroVM ها در بلوک های ساختمانی پلتفرم سخت افزاری Lambda Worker که متعلق به AWS است، بسته بندی می شوند. زمان اجرا یکسان نمی تواند توسط توابع مختلف استفاده شود، همچنین microVM ها برای حساب های مختلف AWS منحصر به فرد نیستند.

تجزیه و تحلیل دقیق AWS Lambda

مدل جداسازی لامبدا AWS

جداسازی محیط های زمان اجرا با استفاده از مکانیسم های مختلفی اجرا می شود. در سطح بالای هر محیط کپی جداگانه ای از اجزای زیر وجود دارد:

  • کد تابع
  • هر لایه Lambda انتخاب شده برای تابع
  • محیط اجرای توابع
  • حداقل فضای کاربری مبتنی بر لینوکس آمازون

مکانیسم های زیر برای جداسازی محیط های اجرایی مختلف استفاده می شود:

  • cgroups - محدود کردن دسترسی به CPU، حافظه، ذخیره سازی و منابع شبکه برای هر محیط زمان اجرا.
  • فضاهای نام - شناسه های فرآیند، شناسه های کاربر، رابط های شبکه و سایر منابع مدیریت شده توسط هسته لینوکس را گروه بندی می کند. هر زمان اجرا در فضای نام خود اجرا می شود.
  • seccomp-bpf - تماس های سیستمی را که می توان در زمان اجرا استفاده کرد را محدود می کند.
  • iptables و جداول مسیریابی - جداسازی محیط های اجرا از یکدیگر.
  • chroot - دسترسی محدودی به سیستم فایل زیرین فراهم می کند.

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

اگرچه چندین زمان اجرا از یک حساب AWS می‌تواند روی یک microVM اجرا شود، تحت هیچ شرایطی نمی‌توان microVM‌ها را بین حساب‌های مختلف AWS به اشتراک گذاشت. AWS Lambda تنها از دو مکانیسم برای جداسازی microVM ها استفاده می کند: نمونه های EC2 و Firecracker. جداسازی مهمان در لامبدا بر اساس نمونه های EC2 از سال 2015 وجود داشته است. Firecracker یک Hypervisor منبع باز جدید است که به طور خاص توسط AWS برای بارهای کاری بدون سرور طراحی شده و در سال 2018 معرفی شده است. سخت افزار فیزیکی در حال اجرا microVM بین بارهای کاری در حساب های مختلف به اشتراک گذاشته می شود.

ذخیره محیط ها و حالت های فرآیند

اگرچه زمان اجرا لامبدا برای عملکردهای مختلف منحصر به فرد است، اما می تواند یک تابع را به طور مکرر فراخوانی کند، به این معنی که زمان اجرا می تواند چندین ساعت قبل از از بین رفتن زنده بماند.

هر زمان اجرای Lambda همچنین دارای یک سیستم فایل قابل نوشتن است که از طریق دایرکتوری /tmp قابل دسترسی است. محتویات آن از سایر زمان های اجرا قابل دسترسی نیست. تا آنجا که به پایداری وضعیت فرآیند مربوط می شود، فایل های نوشته شده در /tmp برای کل چرخه حیات محیط زمان اجرا وجود دارند. این اجازه می دهد تا نتایج تماس های متعدد جمع شود، که به ویژه برای عملیات گران قیمت مانند بارگیری مدل های یادگیری ماشین مفید است.

انتقال داده تماس

Invoke API را می توان در دو حالت استفاده کرد: حالت رویداد و حالت درخواست پاسخ. در حالت رویداد، تماس برای اجرای بعدی به یک صف اضافه می شود. در حالت درخواست پاسخ، تابع فوراً با بار ارائه شده فراخوانی می شود و پس از آن پاسخ برگردانده می شود. در هر دو مورد، این تابع در یک محیط لامبدا اجرا می شود، اما با مسیرهای بار متفاوت.

در طول تماس‌های درخواست-پاسخ، محموله از یک API پردازش درخواست (API Caller)، مانند AWS API Gateway یا AWS SDK، به متعادل‌کننده بار و سپس به سرویس تماس Lambda (سرویس فراخوانی) جریان می‌یابد. دومی محیط مناسب برای اجرای تابع را تعیین می کند و بار را برای تکمیل تماس به آنجا منتقل می کند. متعادل کننده بار ترافیک محافظت شده با TLS را از طریق اینترنت دریافت می کند. ترافیک در سرویس لامبدا - پس از متعادل کننده بار - از یک VPC داخلی در یک منطقه AWS خاص عبور می کند.

تجزیه و تحلیل دقیق AWS Lambda

مدل پردازش تماس AWS Lambda: حالت درخواست-پاسخ

تماس های رویداد را می توان بلافاصله برقرار کرد یا به یک صف اضافه کرد. در برخی موارد، صف با استفاده از Amazon SQS (سرویس صف ساده آمازون) اجرا می‌شود که تماس‌ها را از طریق یک فرآیند نظرسنجی داخلی به سرویس انجام تماس Lambda ارسال می‌کند. ترافیک ارسال شده توسط TLS محافظت می شود و هیچ رمزگذاری اضافی برای داده های ذخیره شده در Amazon SQS وجود ندارد.

تماس‌های رویداد پاسخی را بر نمی‌گردانند - Lambda Worker به سادگی هرگونه اطلاعات پاسخی را نادیده می‌گیرد. تماس‌های مبتنی بر رویداد از Amazon S3، Amazon SNS، CloudWatch و سایر منابع توسط Lambda در حالت رویداد پردازش می‌شوند. تماس‌های آمازون Kinesis و DynamoDB، صف‌های SQS، Application Load Balancer و تماس‌های API Gateway به روش درخواست-پاسخ پردازش می‌شوند.

نظارت

می‌توانید با استفاده از مکانیسم‌ها و سرویس‌های مختلف AWS، از جمله موارد زیر، عملکردهای Lambda را نظارت و ممیزی کنید.

CloudWatch آمازون
آمارهای مختلفی مانند تعداد درخواست‌ها، مدت زمان درخواست‌ها و تعداد درخواست‌های شکست خورده را جمع‌آوری می‌کند.

Amazon CloudTrail
به شما امکان می دهد اطلاعات مربوط به فعالیت حساب مرتبط با زیرساخت AWS خود را وارد کنید، به طور مداوم نظارت کنید و نگهداری کنید. شما یک تاریخچه کامل از اقدامات انجام شده با استفاده از کنسول مدیریت AWS، AWS SDK، ابزارهای خط فرمان و سایر خدمات AWS خواهید داشت.

AWS X-Ray
مشاهده کامل تمام مراحل پردازش درخواست در برنامه شما را بر اساس نقشه اجزای داخلی آن فراهم می کند. به شما امکان می دهد برنامه ها را در طول توسعه و در محیط های تولید تجزیه و تحلیل کنید.

پیکربندی AWS
می‌توانید تغییرات پیکربندی عملکرد Lambda (از جمله حذف) و زمان‌های اجرا، برچسب‌ها، نام‌های کنترل‌کننده، اندازه کد، تخصیص حافظه، تنظیمات زمان‌بندی و تنظیمات همزمان، و همچنین نقش اجرای Lambda IAM، زیرشبکه‌سازی و اتصال‌های گروه امنیتی را ردیابی کنید. .

نتیجه

AWS Lambda مجموعه ای قدرتمند از ابزارها را برای ایجاد برنامه های کاربردی ایمن و مقیاس پذیر ارائه می دهد. بسیاری از اقدامات امنیتی و انطباق در AWS Lambda مانند سایر سرویس‌های AWS است، اگرچه استثنائاتی نیز وجود دارد. از مارس 2019، لامبدا با SOC 1، SOC 2، SOC 3، PCI DSS، انطباق با قانون قابل حمل و پاسخگویی بیمه سلامت (HIPAA) و سایر مقررات مطابقت دارد. بنابراین، هنگامی که به اجرای برنامه بعدی خود فکر می کنید، سرویس AWS Lambda را در نظر بگیرید - ممکن است بهترین مناسب برای کار شما باشد.

منبع: www.habr.com

اضافه کردن نظر