AWS لامدا - النظرية ، التعارف

جولة سريعة في AWS Lambda


ما هذا


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

لماذا استخدامها؟


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

هذا النهج له عيوبه ، لا يمكنك التحكم في نظام التشغيل الذي يتم تنفيذ الرمز ، لا يمكنك التحكم في وحدة المعالجة المركزية والذاكرة والموارد. كل هذا يتم بواسطة AWS.

كل ما يمكنك فعله هو اختيار لغة من AWS Lambda المدعومة.

ماذا يمكن؟


فيما يلي قائمة مختصرة بالسمات الرئيسية لـ AWS Lambda. بعد ذلك ، سوف ننظر في كل شيء في النظام.



1. المشغلات


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

فيما يلي قائمة بجميع المشغلات المحتملة:

بوابة API
AWS إنترنت الأشياء
مجموعة مهارات اليكسا
اليكسا المنزل الذكي
موازن تحميل التطبيق
CloudFront
أحداث Cloudwatch
سجلات Cloudwatch
CodeCommit
الزناد Cognito المزامنة
DynamoDB
كينسيس
S3
SNS
SQS

لكل منها ، ستحتاج إلى تكوين معلمات فريدة متوفرة لهذه المشغلات. يمكنك أيضا تكوين مشغلات متعددة على واحد لامدا. يعتمد ذلك على نوع المشغل ما إذا كانت اللمدا ستنفذ بشكل متزامن أو غير متزامن.
إشعار: يرجى ملاحظة أنه يمكن إجراء lambda لتنفيذ إما باستخدام AWS CLI ، AWS SDK في الوضع اليدوي ، وتمرير جميع المعلمات اللازمة. بما في ذلك ما إذا كان سيتم تشغيله بشكل متزامن أم لا

لنلقِ نظرة على مثال:


1. بوابة API - يسمح لك بسحب lambda بناءً على طلب http ويتطلب إعادة النتيجة إلى المستخدم. لا يمكن إجراء مثل هذه العملية بشكل غير متزامن ، لأن يتطلب إجابة بالنسبة للعمليات المتزامنة ، لا تتوفر بعض الوظائف.

2. SQS - على سبيل المثال ، إذا عالجت lambda رسائلنا من SQS ، فلن تحتاج إلى إرجاع النتيجة إلى أي مكان ويمكن تنفيذها بشكل غير متزامن. مع التنفيذ غير المتزامن ، تظهر العديد من الميزات الجديدة ، على سبيل المثال ، يمكننا تكوين التنفيذ المتكرر في حالة وجود خطأ ، أو إرسال هذه الطلبات إلى قائمة انتظار "ميتة" SQS .

2. أذونات لخدمات AWS


هذه هي خدمات AWS التي لدى lambda الوصول الافتراضي إليها. ماذا يعني هذا؟ يمكنك دائمًا توصيل AWS SDK بالوظيفة التي ستكتبها ، وبدون المفاتيح أو أي معلمات ترخيص ، يمكنك استخدام الخدمات المتاحة. يمكنك تحديد جميع الخدمات المتاحة في دور IAM الذي تستخدمه لهذا لامدا.

كل لغة تستخدم لديها SDK الخاصة بها والتي يمكنها التواصل مع خدمات AWS الرئيسية.
إشعار: لكل لامدا تقوم بتكوين دور IAM من الشخص الذي سيدير ​​لامدا

3. VPC


يمكنك تكوين شبكة افتراضية لـ lambda ، على سبيل المثال ، للاتصال بأمان بـ RDS .

4. محرر على الانترنت


يوفر AWS Lambda أيضًا القدرة على تعديل شفرة وظيفتك مباشرةً من الواجهة في متصفحك.



5. قطع الأشجار


يتم تسجيل جميع طلبات lambda في CloudWatch ، كما يتم تسجيل البيانات المتعلقة بوقت التشغيل والذاكرة هناك ، ويمكن أن تكون هذه البيانات مفيدة للغاية في تحديد الحدود. أيضا ، الكود لديه القدرة على تسجيل البيانات الخاصة بك (على سبيل المثال ، في Node.js عبر console.log).

بالإضافة إلى ذلك ، يمكنك دائمًا الاطلاع على إحصائيات حول استخدام lambda في علامة التبويب المراقبة .

6. متغيرات البيئة


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

7. رمز


الآن الجزء الأكثر إثارة للاهتمام ، يتكون لامدا نفسه من عدة أجزاء.

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

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

2. بيئة الوظيفة - يجب أن يحتوي الرمز بالضرورة على وظيفة سيتم تنفيذها مباشرة في كل مرة يتم فيها إطلاق lambda (معالج) . عنها أدناه. وأمامها هي البيئة التي نطلبها. الحقيقة هي أن إدارة الموارد تحدث بطريقة تخزن بها هذه البيئة بشكل منفصل عن الوظيفة لبعض الوقت بعد اكتمالها. وفي البداية ، يتم استئنافها دون إنفاق الوقت والموارد على التهيئة. وبالتالي ، يجب تهيئة كل ما هو ممكن للوظيفة نفسها ، على سبيل المثال ، التكوين ، مكتبات الاتصال ، إلخ.

3. معالج - يتم تنفيذ التعليمات البرمجية المنفذة مباشرة نفسها ، اعتمادا على اللغة ، بشكل مختلف. على سبيل المثال ، خذ Node.Js. من أجل تنفيذ التعليمات البرمجية الخاصة بك ، تحتاج إلى:

  1. شبيبة الملف - 1PC
  2. export.yourFunction = () => {// الكود}} - 1pc

بشكل افتراضي ، يتم تشغيل index.js ويبحث عن وظيفة تسمى "معالج" فيها. ثم ينفذها. قد تكون وظيفتك غير متزامنة في التعليمات البرمجية. هذا لا يؤثر على التنفيذ المتزامن لامدا.

فيما يلي نموذج التعليمات البرمجية ، سأحاول وصف ما يحدث هناك:

//AWS SDK  ,     e var AWS = require('aws-sdk'); //   //   ,    //   API Gateway. // ,    http  exports.handler = async(event, context) => { // event       // context     aws lambda : //   ,      console.log('testing cloud watch'); // ^       Cloud Watch   return { //     http ,     statusCode: 200, body: 'Hello world', headers: {} }; }; exports.handler = (event, context, callback) => { //    callback, // -      callback( null, //<-  ,       { //     statusCode: 200, body: 'Hello world' } ); }; 

8. الإصدار


تدعم الخدمة إصدار مناسب. باختصار ، يمكننا إصدار إصدار لكل نسخة تم تنزيلها. وإضافة الأسماء المستعارة التي تشير إلى بعض الإصدار. كيف يعمل؟ انظر الرسم البياني أدناه.



وهكذا ، دعونا الآن نتعرف على ما يجب القيام به للحصول على ما نراه في المخطط


دولة واحدة


  1. إنشاء الإصدار الأول من لامدا لدينا. جنبًا إلى جنب مع الإصدار الأول ، نقوم بإنشاء مؤشر إلى إصدار "LATEST $" . يشير دائمًا إلى أحدث إصدار تم إضافته.
  2. أضف الاسم المستعار "Dev" . هنا نختار مكان الربط ، ولدينا العديد من الخيارات - قم بإنشاء مؤشر إلى رقم إصدار محدد ، وفي حالتنا "1" ، أو ربط المؤشر بـ "$ LATEST" ، أو ربط اسمًا مستعارًا آخر. في هذه الحالة ، نرفق بمؤشر "LATEST" $ ، والآن سيشير اسمنا المستعار "Dev" دائمًا إلى الفرع الأخير ، لذلك يمكننا دائمًا اختبار تطبيقنا باستخدام أحدث إصدار من lambda على بيئة dev. وإذا كنا بحاجة فجأة إلى التحقق من كيفية عمله على الإصدار القديم ، فنحن بحاجة فقط إلى تبديل الاسم المستعار في المشغل أو تغيير الرابط في الاسم المستعار إلى الإصدار دون لمس تطبيقنا
  3. إضافة الاسم المستعار المرحلة وربطه إلى الإصدار الأول من لامدا لدينا
  4. أضف الاسم المستعار "Prod" وكرر ما فعلناه من أجل "Stage"

إشعار: هنا يتم وصف كيفية التعامل مع الأسماء المستعارة في الممارسة. الجزء العملي على lambda سيكون في المقالة التالية مع SQS

وهكذا ، أصبح لدينا الآن شيء غير مفهوم ، في الواقع تشير الأسماء المستعارة 3 إلى إصدار واحد ، الأمر غير واضح. ولكن لا شيء ، كل شيء في النظام

الحالة الثانية


  1. قم بإنشاء إصدار ثانٍ من lambda (من الممكن إضافة الإخراج الثاني من "Hello world"). هنا أود أن أشير إلى أنه في هذه اللحظة "LATEST $" سوف ننظر على الفور إلى الإصدار الثاني. وبما أن "Dev" مرتبط بـ "$ LATEST" ، فسوف يبحث أيضًا في الإصدار الثاني.
  2. بعد ذلك ، نريد أن ننظر إلى المرحلة الخاصة بنا في الإصدار الثاني. الآن يرتبط بالإصدار "1" . نحن هنا بحاجة إلى تغيير النسخة المشار إليها بواسطة "المرحلة " يدويًا.
  3. نحن نفرح. لقد حصلنا على ما نراه على أنه الحالة الثانية على الرسم البياني. وهذا هو ، لدينا "Prod" ينظر إلى الإصدار الأول ، و "Dev" و "Stage" في الإصدار الثاني.

الحالة الثالثة


الآن ، للحصول على الحالة الثالثة ، نحتاج فقط إلى إضافة سطرين إضافيين إلى الكود الخاص بنا وسيكون هناك إصدار ثالث من lambda. و "ديف" سوف ننظر الآن لها.

لخص


وماذا لدينا؟

قليلا واحد. بسرعة. رخيصة نسبيا. Avtomasshtabiruemuyu. إصداراتها. وظيفة.
في هذه المقالة ، نظرنا فقط في الجزء النظري ، الألفة مع هذه الخدمة. كما هو الحال مع SQS في المادة الأخيرة. في المقالة التالية ، سننظر في كيفية تفاعل هاتين الخدمتين مع بعضهما البعض وفي الشكل العملي ، سنتعلم كيفية تكوينهما واستخدامهما.

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


All Articles