تحليل مفصل لـ AWS Lambda

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

تحليل مفصل لـ AWS Lambda

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

AWS لامدا

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

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

متى يتم التبديل إلى 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

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

وقت تشغيل Lambda

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

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

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

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

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

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

تحليل مفصل لـ AWS Lambda

نموذج العزل في AWS Lambda

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

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

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

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

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

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

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

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

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

تحويل بيانات المكالمات

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

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

تحليل مفصل لـ AWS Lambda

نموذج معالجة مكالمات AWS Lambda: وضع الاستجابة للطلب

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

لا تُرجع استدعاءات الأحداث استجابات - يتجاهل Lambda Worker ببساطة أي معلومات استجابة. يتم التعامل مع المكالمات المستندة إلى الأحداث من Amazon S3 و Amazon SNS و CloudWatch والمصادر الأخرى بواسطة خدمة Lambda في وضع الحدث. يتم التعامل مع المكالمات من خيوط Amazon Kinesis و DynamoDB والمكالمات إلى قوائم انتظار SQS و Application Load Balancer و API Gateway في وضع استجابة الطلب.

رصد

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

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

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

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

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

اختتام

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

المصدر: www.habr.com

إضافة تعليق