تحليل مفصل AWS لامدا

تم إعداد ترجمة للمقال خصيصًا لطلاب دورة " الخدمات السحابية" . هل هو مثير للاهتمام لتطوير في هذا الاتجاه؟ شاهد فئة رئيسية من إعداد Egor Zuev (TeamLead at InBit) "AWS EC2 Service" وانضم إلى أقرب مجموعة دورات: تبدأ في 26 سبتمبر.



يتحول المزيد والمزيد من الأشخاص إلى AWS Lambda من أجل التوسع والأداء وتوفير التكاليف والقدرة على معالجة الملايين أو حتى تريليونات الطلبات شهريًا. للقيام بذلك ، لا تحتاج إلى إدارة البنية التحتية التي تعمل عليها الخدمة. و autoscaling يسمح لك لخدمة الآلاف من الطلبات المتزامنة في الثانية الواحدة. أعتقد أن AWS Lambda يمكن أن يسمى بحق إحدى خدمات AWS الأكثر شعبية.


AWS لامدا


AWS Lambda هي خدمة حوسبة بدون خادم موجهة للأحداث تتيح لك تنفيذ التعليمات البرمجية دون تخصيص الخوادم وإدارتها واستكمال خدمات AWS الأخرى استنادًا إلى منطق المستخدم. يستجيب Lambda تلقائيًا للأحداث المختلفة (ما يطلق عليه المشغلات) ، على سبيل المثال ، لطلبات HTTP من خلال بوابة واجهة برمجة تطبيقات Amazon ، وتغيير البيانات في سلال Amazon S3 أو جداول Amazon DynamoDB ؛ أو يمكنك تشغيل التعليمات البرمجية من خلال مكالمات API باستخدام AWS SDK والتحولات الحالة في AWS Step Functions.


تقوم Lambda بتشغيل التعليمات البرمجية على بنية تحتية للحوسبة يمكن الوصول إليها بشكل كبير وهي مسؤولة تمامًا عن إدارة النظام الأساسي الأساسي ، بما في ذلك صيانة نظام الخادم والخادم ، وتخصيص الموارد ، والتحجيم التلقائي ، ومراقبة الكود ، والتسجيل. هذا هو ، تحتاج فقط إلى تحميل التعليمات البرمجية الخاصة بك وتكوين كيف ومتى ينبغي تنفيذها. بدورها ، ستهتم الخدمة بإطلاقها وتضمن توفر التطبيق بشكل كبير.


متى الترقية إلى لامدا؟


AWS Lambda هي عبارة عن منصة حوسبة مريحة مناسبة للعديد من سيناريوهات التطبيق ، بطبيعة الحال ، إذا كانت اللغة ووقت تشغيل الكود الخاصين بك مدعومين من قبل الخدمة. إذا كنت ترغب في التركيز على التعليمة البرمجية ومنطق العمل مع صيانة الخادم وتوفيره وتوسيع نطاقه لمزود طرف ثالث بسعر معقول ، يجب عليك بالتأكيد الترقية إلى AWS Lambda.


تعد Lambda مثالية لإنشاء واجهات البرامج ، وإذا كنت تستخدم الخدمة مع بوابة API ، فيمكنك تقليل التكاليف بشكل كبير والدخول إلى السوق بشكل أسرع. هناك عدة طرق لاستخدام وظائف Lambda وخياراته لتنظيم بنية بدون خادم - سيكون الجميع قادرين على اختيار شيء مناسب بناءً على هدفهم.


Lambda يسمح لك بأداء مجموعة واسعة من المهام. لذلك ، بفضل دعم CloudWatch ، يمكنك إنشاء مهام معلقة وأتمتة العمليات الفردية. لا توجد قيود على طبيعة وكثافة استخدام الخدمة (يتم أخذ استهلاك الذاكرة والوقت في الاعتبار) ، ولا شيء يمنعك من العمل بشكل منتظم على خدمة ميكروية متكاملة تعتمد على Lambda.


هنا يمكنك إنشاء إجراءات موجهة نحو الخدمة لا يتم تنفيذها باستمرار. مثال نموذجي هو تحجيم الصورة. حتى في حالة الأنظمة الموزعة ، لا تفقد وظائف Lambda أهميتها.


لذلك ، إذا كنت لا ترغب في المشاركة في تخصيص وإدارة موارد الحوسبة - جرب AWS Lambda ؛ إذا كنت لا تحتاج إلى حوسبة كثيفة الاستخدام للموارد ، حاول أيضًا استخدام AWS Lambda ؛ إذا تم تشغيل الكود الخاص بك بشكل دوري - كل شيء صحيح ، يجب عليك تجربة AWS Lambda.


سلامة


حتى الآن ، لا توجد شكاوى حول السلامة. من ناحية أخرى ، نظرًا لأن العديد من العمليات الداخلية وميزات التنفيذ الخاصة بهذا النموذج مخفية عن مستخدم وقت التشغيل المدار لـ AWS Lambda ، فإن بعض قواعد الأمان السحابية المقبولة عمومًا لم تعد ذات صلة.


مثل معظم خدمات AWS ، يتم توفير Lambda على أساس المسؤولية المشتركة بين AWS والعميل فيما يتعلق بالأمن والامتثال التنظيمي. يقلل هذا المبدأ من العبء التشغيلي على العميل ، نظرًا لأن AWS يتولى مهام خدمة وإدارة ومراقبة مكونات الخدمة - من نظام التشغيل المضيف ومستوى المحاكاة الافتراضية إلى الأمان الفعلي لكائنات البنية التحتية.


عند التحدث بشكل خاص عن AWS Lambda ، تعتبر AWS مسؤولة عن إدارة البنية التحتية الأساسية والخدمات الأساسية ذات الصلة ونظام التشغيل ومنصة التطبيق. بينما يكون العميل مسؤولاً عن أمان كوده ، وتخزين البيانات السرية ، والتحكم في الوصول إليها ، فضلاً عن خدمات وموارد Lambda (إدارة الهوية والوصول ، IAM) ، بما في ذلك ضمن نطاق الوظائف المستخدمة.


يوضح الرسم البياني أدناه نموذج المسؤولية المشتركة المطبق على AWS Lambda. مجال مسؤولية AWS برتقالي ، ومسؤولية العميل زرقاء. كما ترون ، تتحمل AWS مزيدًا من المسؤولية عن التطبيقات المنشورة على الخدمة.



نموذج المسؤولية المشتركة المطبق على AWS Lambda


لامدا وقت التشغيل


الميزة الرئيسية لـ Lambda هي أن الخدمة نفسها ، عند القيام بوظيفة نيابة عنك ، تخصص الموارد اللازمة. يمكنك توفير الوقت والجهد في إدارة النظام والتركيز على منطق الأعمال وكتابة التعليمات البرمجية.


تنقسم خدمة لامدا إلى طائرتين. الأول هو طائرة التحكم. وفقًا لـ Wikipedia ، فإن طائرة التحكم هي جزء من الشبكة المسؤولة عن إشارات المرور والتوجيه. إنه المكون الرئيسي الذي يتخذ القرارات العالمية بشأن تخصيص أعباء العمل وصيانتها وتوزيعها. بالإضافة إلى ذلك ، تعمل طائرة التحكم كطبولوجيا شبكية لمزود الحلول ، المسؤول عن توجيه وإدارة حركة المرور.


الطائرة الثانية هي طائرة البيانات. لها ، مثل طائرة التحكم ، مهامها الخاصة. توفر طائرة الإدارة واجهة برمجة تطبيقات لإدارة الوظائف (CreateFunction و UpdateFunctionCode) وتتحكم في تفاعل Lambda مع خدمات AWS الأخرى. يتم التحكم في طائرة البيانات من خلال واجهة برمجة تطبيقات Invoke ، والتي تستدعي وظائف Lambda. بعد استدعاء الوظيفة ، تقوم طائرة التحكم بتحديد أو تحديد وقت التشغيل الحالي الذي تم إعداده مسبقًا لهذه الوظيفة ، ثم تقوم بتنفيذ التعليمات البرمجية فيه.


يدعم AWS Lambda العديد من لغات البرمجة ، بما في ذلك Java 8 و Python 3.7 و Go و NodeJS 8 و .NET Core 2 وغيرها ، من خلال أوقات التشغيل الخاصة بكل منها. تقوم AWS بتحديثها بانتظام وتوزع تصحيحات الأمان وتنفذ عمليات صيانة أخرى على هذه البيئات. تتيح لك Lambda استخدام لغات أخرى ، شريطة أن تقوم أنت بنفسك بتنفيذ وقت التشغيل المناسب. وبعد ذلك سيتعين عليك التعامل مع صيانتها ، بما في ذلك مراقبة السلامة.


كيف يعمل كل شيء وكيف ستؤدي الخدمة وظائفك؟


تعمل كل وظيفة في واحدة أو عدة بيئات محددة موجودة فقط خلال دورة حياة هذه الوظيفة ، ثم يتم إتلافها. في كل بيئة ، يتم إجراء مكالمة واحدة فقط في كل مرة ، ولكن يتم إعادة استخدامها إذا كان هناك العديد من المكالمات التسلسلية من نفس الوظيفة. تعمل جميع أوقات التشغيل على الأجهزة الافتراضية المزودة بمحاكاة افتراضية للأجهزة - على ما يسمى microVM. يتم تعيين كل microVM لحساب AWS محدد ويمكن إعادة استخدامه بواسطة البيئات لأداء وظائف مختلفة على هذا الحساب. يتم حزم MicroVM في لبنات بناء منصة الأجهزة Lambda Worker ، التي تمتلك AWS وتديرها. لا يمكن استخدام وقت التشغيل نفسه بواسطة وظائف مختلفة ، تمامًا مثلما تتميز microVMs بحسابات AWS المختلفة.



نموذج العزل لامدا AWS


يتم تنفيذ عزل وقت التشغيل باستخدام عدة آليات. في أعلى مستوى من كل بيئة ، هناك نسخ منفصلة من المكونات التالية:


  • رمز الوظيفة
  • أي طبقات Lambda محددة للوظيفة
  • وظيفة وقت التشغيل
  • الأمازون لينكس الحد الأدنى لمساحة المستخدم

يتم استخدام الآليات التالية لعزل بيئات وقت التشغيل المختلفة:


  • cgroups - تقييد الوصول إلى موارد وحدة المعالجة المركزية والذاكرة وعرض النطاق الترددي لمحرك الأقراص والشبكة لكل بيئة تشغيل ؛
  • مساحات الأسماء - تجميع معرفات العملية ، ومعرفات المستخدم ، وواجهات الشبكة ، والموارد الأخرى التي تديرها نواة Linux. يعمل كل وقت تشغيل في مساحة الاسم الخاصة به ؛
  • seccomp-bpf - تقييد مكالمات النظام التي يمكن استخدامها في بيئة وقت التشغيل ؛
  • iptables وجداول التوجيه - عزل بيئات وقت التشغيل فيما بينها ؛
  • chroot - توفير وصول محدود إلى نظام الملفات الأساسي.

بالإضافة إلى تقنية عزل AWS ، تضمن هذه الآليات فصل موثوق بيئات وقت التشغيل. لا يمكن للوسائط المعزولة بهذه الطريقة الوصول إلى أو تعديل البيانات من الوسائط الأخرى.


على الرغم من أنه يمكن تشغيل أوقات تشغيل متعددة لحساب AWS نفسه على نفس microVM ، لا يمكن بأي حال من الأحوال مشاركة microVMs بين حسابات AWS المختلفة. تستخدم AWS Lambda آليتين فقط لعزل microVM: مثيلات EC2 و Firecracker. تم استخدام عزل النزلاء في Lambda استنادًا إلى مثيلات EC2 منذ عام 2015. Firecracker هو برنامج hypervisor مفتوح المصدر الجديد المصمم خصيصًا من قِبل AWS لأعباء العمل بدون خادم وتم تقديمه عام 2018. تتم مشاركة المعدات المادية التي تعمل عليها microVM بين أعباء العمل الخاصة بالحسابات المختلفة.


حفظ بيئات عملية والولايات


على الرغم من أن أوقات تشغيل Lambda فريدة بالنسبة للوظائف المختلفة ، إلا أنها يمكنها استدعاء الوظيفة نفسها بشكل متكرر ، أي أن وقت التشغيل قد يستمر لعدة ساعات قبل إتلافه.


كل وقت Lambda لديه أيضا نظام ملفات إذن الكتابة ، يمكن الوصول إليها من خلال الدليل / tmp. لا يمكن الوصول إلى محتوياته من أوقات التشغيل الأخرى. فيما يتعلق بالحفاظ على حالات العملية ، توجد الملفات المسجلة في / tmp طوال دورة حياة وقت التشغيل بأكملها. نتيجة لهذا ، من الممكن تجميع نتائج عدة مكالمات ، وهو أمر مفيد بشكل خاص لعمليات مكلفة مثل تحميل نماذج تعلم الآلة.


استدعاء نقل البيانات


يمكن استخدام واجهة برمجة تطبيقات Invoke في وضعين: في وضع الحدث وفي وضع استجابة الطلب. في وضع الحدث ، تتم إضافة المكالمة إلى قائمة الانتظار للتنفيذ اللاحق. في وضع "استجابة الطلب" ، يتم استدعاء الوظيفة على الفور مع الحمولة المقدمة ، وبعد ذلك يتم إرجاع الاستجابة. في كلتا الحالتين ، يتم تنفيذ الوظيفة في بيئة Lambda ، ولكن باستخدام مسارات حمولة مختلفة.


أثناء مكالمات استجابة الطلب ، تأتي الحمولة النافعة من واجهة برمجة تطبيقات معالجة الطلبات (API Caller) ، مثل بوابة AWS API أو AWS SDK ، إلى موازن التحميل ، ثم إلى خدمة تنفيذ مكالمة Lambda (خدمة استدعاء). يحدد الأخير البيئة المناسبة لتنفيذ الوظيفة وينقل الحمولة الصافية هناك لإكمال المكالمة. يستقبل موازن التحميل حركة المرور باستخدام حماية TLS عبر الإنترنت. تمر حركة المرور داخل خدمة Lambda - بعد موازن التحميل - عبر VPC الداخلي في منطقة AWS محددة.



AWS Lambda Call Processing Model: Request-Response Mode


يمكن إجراء مكالمات الأحداث على الفور أو إضافتها إلى قائمة الانتظار. في بعض الحالات ، يتم تطبيق قائمة الانتظار باستخدام خدمة Amazon SQS (خدمة Amazon Simple Queue Service) ، التي تنقل المكالمات إلى خدمة تنفيذ استدعاء Lambda من خلال عملية اقتراع داخلية. تتم حماية حركة المرور المنقولة بواسطة TLS ، ولا يتم توفير تشفير إضافي للبيانات المخزنة في Amazon SQS.


مكالمات الأحداث لا تُرجع الردود - يتجاهل Lambda Worker ببساطة أي معلومات استجابة. تتم معالجة المكالمات القائمة على Amazon S3 و Amazon SNS و CloudWatch وغيرها من المصادر بواسطة Lambda في وضع الحدث. تتم معالجة المكالمات من تدفقات Amazon Kinesis و DynamoDB ، والمكالمات من قوائم انتظار SQS ، وموازنة تحميل التطبيق ، وواجهات برمجة التطبيقات (API) لـ Gateway في وضع استجابة الطلب.


مراقبة


يمكنك مراقبة وتدقيق وظائف Lambda باستخدام مختلف آليات AWS والخدمات ، بما في ذلك ما يلي.


سحابة الأمازون
إنه يجمع إحصائيات متنوعة ، مثل عدد الطلبات ومدة الطلبات وعدد الطلبات التي فشلت.


الأمازون CloudTrail
يتيح لك تسجيل معلومات نشاط الحساب المرتبطة ببنية AWS ومراقبتها باستمرار وحفظها. سيكون لديك تسلسل زمني كامل للإجراءات التي يتم تنفيذها باستخدام AWS Management Console و AWS SDK وأدوات سطر الأوامر وخدمات AWS الأخرى.


AWS الأشعة السينية
يوفر رؤية كاملة لجميع مراحل معالجة الطلب في طلبك بناءً على خريطة لمكوناته الداخلية. يتيح لك تحليل التطبيقات أثناء التطوير وفي بيئة الإنتاج.


التكوين AWS
سوف تكون قادرًا على تتبع التغييرات في تكوين وظائف Lambda (بما في ذلك إزالتها) وأوقات التشغيل والعلامات وأسماء المعالجين وحجم الرمز وتخصيص الذاكرة وإعدادات زمن الوصول والتزامن ، وكذلك دور وقت تشغيل Lambda IAM والشبكة الفرعية وربط مجموعات الأمان.


استنتاج


تقدم AWS Lambda مجموعة قوية من الأدوات لإنشاء تطبيقات آمنة وقابلة للتطوير. لا تختلف العديد من طرق السلامة والامتثال التنظيمي في AWS Lambda عن تلك المستخدمة في خدمات AWS الأخرى ، رغم وجود استثناءات. اعتبارًا من مارس 2019 ، تتوافق Lambda مع SOC 1 و SOC 2 و SOC 3 و PCI DSS وقانون استمرارية التأمين الصحي والمساءلة في الولايات المتحدة (HIPAA) واللوائح الأخرى. لذلك ، عندما تفكر في تطبيق تطبيق آخر ، فكر في خدمة AWS Lambda - ربما يكون هو الأنسب لمهمتك.

Source: https://habr.com/ru/post/ar466519/


All Articles