كيفية بناء خلفية قوية بسهولة مع Serverless

بناء معالج الصور على AWS Lambda

تلبية جيف بار في AWS إعادة: اختراع

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

في أوائل عام 2016 ، حضرت لقاء مع AWS. في هذا اللقاء ، تحدث سام كرونينبرج عن كيفية بناء A Cloud Guru بهندسة معمارية بدون خادم على AWS. فجر لي بعيدا. فكرة استخدام AWS Lambda لإنشاء تطبيقات الويب دون إدارة أو توسيع نطاق الخوادم جعلني أعلق الأمر.

منذ ذلك الحين خصصت وقت فراغي للتعلم والمدونات حول Serverless. بعد ستة أشهر من ذلك الاجتماع ، عرضت علي سام وظيفة وأقوم الآن بإنشاء أنظمة Serverless بدوام كامل لـ A Cloud Guru.

كان للتعلم حول Serverless تأثير كبير على طريقة إنشاء البرامج. اكتسب Serverless الكثير من الزخم والنضج في عام 2016. ربما نظرت إليه العام الماضي ولكنك لم تجربه أو ربما لم تسمع به من قبل. مهما كان الأمر ، لم يكن هناك وقت أفضل للبدء.

ما هو (وليس) بدون خادم؟

لا يزال هناك الكثير من النقاش حول ما هو Serverless. الآن الجواب يعتمد على من تسأل. هناك سؤالان ، ما هو منتج Serverless وما هي بنية Serverless.

تتم إدارة منتج Serverless بشكل كامل مع التحجيم الحبيبي والفواتير الحبيبية. تشمل المنتجات على سبيل المثال لا الحصر:

  • حساب: AWS لامدا ، وظائف أزور و WebTask.
  • التخزين: S3 ، DynamoDB و Firebase
  • المصادقة: Cognito ، Auth0
  • البحث: ألغوليا

ملاحظة لم أقم بتضمين أي منتجات Platform مثل خدمة (PaaS) مثل Amazon RDS أو Heroku أو Google App Engine. بالنسبة لهذه الخدمات ، تدفع في الساعة وحجم عن طريق إضافة أو إزالة الخوادم الأساسية. قد لا تضطر إلى إدارة الخوادم ولكنك لا تزال بحاجة إلى التفكير فيها.

فما هي بنية Serverless؟ أقوم بتعريف بنية Serverless كـ:

نظام يحركه الحدث ويستخدم FaaS وغيرها من الخدمات المدارة بالكامل للمنطق والمثابرة.

إذا كنت لا تزال تخدش رأسك فلا تقلق. هذا سيكون أكثر منطقية بمجرد رؤية مثال.

الشروع في العمل مع Serverless

أفضل طريقة للتعلم هي الممارسة. دعنا نتظاهر بأن أحد العملاء طلب مني إعادة اختراع الوجوه المجهولة الهوية على الصور.

بدلاً من طمس الوجه ، يريد موكلي استبدال كل وجه برموز تعبيرية. يجب أن يعكس الرموز التعبيرية عاطفة ذلك الوجه.

لتقديم هذه الخدمة أحتاج إلى:

  1. اسمح لعميلتي بتحميل الصور
  2. كشف الوجوه في كل صورة
  3. تحديد عاطفة كل وجه
  4. استبدل كل وجه برموز تعبيرية
  5. تخزين الصورة تحريرها

بدلاً من بناء كل شيء بنفسي ، سأستخدم بنية Serverless على AWS.

أبنية بلا خوادم

هناك ثلاث خدمات أحتاجها لتطوير هذا النظام.

  • أمازون S3: تخزين الملفات على أساس كائن قابلة للتحجيم
  • AWS لامدا: حساب الخادم
  • الأمازون إعادة الإدراك: تحليل الصورة

باستخدام هذه الخدمات قمت بتطوير البنية التالية.

العمارة بدون خادم

دعنا نعود إلى تعريف بنية Serverless.

نظام يحركه الحدث ويستخدم FaaS وغيرها من الخدمات المدارة بالكامل للمنطق والمثابرة.

الهندسة المعمارية التي صممتها تناسب هذا التعريف.

  1. عندما يقوم المستخدم بتحميل ملف ، يتم إنتاج حدث ObjectCreated ويتم استدعاء وظيفة Lambda.
  2. تقوم وظيفة Lambda باستدعاء Amazon Rekognition لاكتشاف الوجوه والعاطفة لكل وجه في الصورة التي تم تحميلها.
  3. تقوم وظيفة Lambda بمعالجة الصورة واستمرار الصورة في Amazon S3

بساطة هذا التصميم هو ما يجعل Serverless جذابة.

ما اللغات والأدوات التي يمكنني استخدامها

إذا كنت ترغب في إنشاء هذا النظام بنفسك ، فأنت بحاجة إلى إنشاء البنية الأساسية والرمز.

لتطوير التعليمات البرمجية ، يمكنك استخدام Node.js أو Python أو Java أو C #. هناك AWS SDK لكل من هذه اللغات. إذا كانت لغتك مفقودة ، راقب دعم اللغة لينمو خلال عام 2017.

لإنشاء البنية التحتية هناك بعض الخيارات. الخيار الأول هو استخدام وحدة التحكم AWS. هذه طريقة جيدة للبدء أثناء التعلم. ولكن هذا لا ينصح به لخدمات الإنتاج. الخيار الآخر هو تطوير البنية التحتية الخاصة بك كرمز. أداتان جيدتان لذلك هما CloudFormation أو Terraform.

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

أرني الرمز

لقد رأيت البنية ، فلننظر إلى بعض الرموز. سأستخدم إطار عمل Serverless و NodeJs.

الخطوة الأولى هي تحديد البنية التحتية باستخدام Serverless Framework. للقيام بذلك ، قمتُ بإنشاء خدمة جديدة.

serverless إنشاء - قالب aws - nodejs - المسار العاطفي-faceswap

بنية تحتية

يؤدي هذا إلى إنشاء مجلد يحتوي على ملف تكوين باسم serverless.yml. يتم تعريف الوظائف والبنية التحتية لخدمي هنا.

هذا التكوين يخلق بلدي Lwda وظيفة faceswap و S3 دلو. سيتم استدعاء وظيفة Lambda عند إنشاء كائن في عمليات التحميل / المجلد.

الشفرة

كل وظيفة في Lambda بها معالج يعمل كنقطة دخول. قمت بتعيين معالج لعملي Lambda src / faceswap.handler في serverless.yml. هذا هو مزيج من مسار الملف src / faceswap.js والدالة لاستدعاء ذلك معالج الملف.

كل وظيفة معالج لها ثلاثة معايير:

module.exports.handler = (حدث ، سياق ، رد اتصال) => {
   ...
   
   // استخدم callback () وأعد المعلومات إلى المتصل.
}
  • الحدث: البيانات المتعلقة بالحدث. في هذه الحالة ، سوف يحتوي على معلومات حول الملف الذي تم إنشاؤه في S3
  • السياق: معلومات وقت التشغيل لامدا
  • رد الاتصال: رد اتصال عقدة عادي يمكنك استخدامه لإرجاع خطأ أو نتيجة.

بالنسبة لمشروعي ، تحتاج وظيفة Lambda إلى القيام بثلاث مهام.

  1. الحصول على صور من الحدث S3
  2. اتصل بـ Rekognition API
  3. معالجة الصور وحفظ النتائج.

يمكنك عرض الكود الذي يستدعي Amazon Rekognition ومعالجة الصور على جيثب.

الخطوة الأخيرة هي نشر المشروع واختباره. لنشر المشروع ركضت الأمر التالي.

sls نشر - المرحلة your_stage_name

قمت بعد ذلك بتحميل الصور من Pexels إلى S3 والتحقق من النتائج.

صور من Pexels

كان هذا مشروع ممتع حقًا. بناء مشروع مثل هذا هو أفضل وسيلة للتعلم. سوف يساعدك على فهم أبنية الأحداث التي تستند إلى الحدث وكيفية إنشاء أنظمة Serverless.

أين يمكنني معرفة المزيد؟

هناك الكثير من الموارد المتاحة لك لتتعلم المزيد عن Serverless.

  • المدونات: Serverless Zone ، Serverless Framework ، مدونة سحابة المعلم
  • كتب: أبنية Serverless على AWS ، AWS Lambda في العمل
  • المناقشات: Serverless المنتدى ، رديت
  • فيديو: عروض ServerlessConf ، Serverless Framework
  • المؤتمر: أوستن ServerlessConf
  • سلاك: serverless المنتدى
  • مجموعات Meetup: تحقق من هذه القائمة أو ابحث في meetup.com
  • الموارد برعاية: رائع Serverless ، موارد Serverless

آمل أن يكون آخر قد ألهمك للنظر في Serverless. هناك الكثير من حالات الاستخدام الكبيرة التي يمكنك تجربتها. تعد واجهة برمجة تطبيقات HTTP أو Chatbot أو Alexa Skill مجرد بعض المشاريع التي يمكنك تجربتها.

إذا كان لديك أي أسئلة حول هذا المشروع أو Serverless بشكل عام ، يمكنك الاتصال بي على "متوسط" أو "تويتر". سأدير ورشة عمل في ServerlessConf Austin إذا كنت تريد مقابلتي شخصياً.

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