إنشاء تطبيق باستخدام Serverless Framework و AWS و BigQuery

نشرت: 2021-01-28

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

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

تثبيت إطار عمل بدون خادم وتهيئته لـ Amazon AWS

شعار بدون خادم

1. إطار عمل بدون خادم

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

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

بعد تثبيته ، يمكنك التأكد من توفر NodeJS عن طريق تشغيل node -v في وحدة التحكم. يجب أن يعيد إصدار العقدة الذي قمت بتثبيته:

نسخة العقدة

أنت الآن على ما يرام ، لذا انطلق وقم بتثبيت إطار عمل Serverless.

للقيام بذلك ، اتبع الوثائق لإعداد وتكوين إطار العمل. إذا كنت تفضل ذلك ، يمكنك تثبيته لمشروع واحد فقط ، ولكن في DevriX ، نقوم عادةً بتثبيت إطار العمل عالميًا: npm install -g serverless

انتظر حتى تنتهي العملية وتأكد من تثبيت Serverless بنجاح عن طريق تشغيل: serverless -v

معلومات بدون خادم

2. أنشئ حساب Amazon AWS

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

قم بإنشاء حساب Amazon AWS

يطلب منك أمازون إدخال بطاقة ائتمان ، لذلك لا يمكنك المتابعة دون إدخال تلك المعلومات. عند التسجيل الناجح وتسجيل الدخول ، يجب أن ترى وحدة الإدارة في AWS:

وحدة التحكم AWS

رائعة! لنبدأ الآن في إنشاء التطبيق الخاص بك.

3. تكوين Serverless Framework مع AWS Provider وإنشاء تطبيق نموذجي

في هذه الخطوة ، يتعين علينا تكوين إطار عمل بدون خادم مع مزود AWS. تتطلب بعض الخدمات مثل AWS Lambda بيانات اعتماد عند الوصول إليها للتأكد من أن لديك أذونات للموارد التي تمتلكها تلك الخدمة. توصي AWS باستخدام AWS Identity and Access Manager (IAM) لتحقيق ذلك.

لذا ، فإن أول وأهم شيء هو إنشاء مستخدم IAM في AWS لاستخدامه في تطبيقنا:

في وحدة تحكم AWS:

  • اكتب IAM في حقل "البحث عن الخدمات" .
  • انقر فوق "IAM" .
  • انتقل إلى "المستخدمون" .
  • انقر فوق "إضافة مستخدم" .

iam-add-user

بالنسبة إلى "اسم المستخدم" ، استخدم ما تريد. على سبيل المثال ، نحن نستخدم serverless-admin. بالنسبة إلى " نوع الوصول " ، حدد "الوصول الآلي" وانقر على "الأذونات التالية ".

iam-add-user2

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

إضافة المستخدم 3

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

إضافة المستخدم 4

الآن علينا تشغيل الأمر التالي:
serverless config credentials --provider aws --key key --secret secret --profile serverless-admin
استبدل المفتاح والسر بالمفتاح المذكور أعلاه. يتم إنشاء بيانات اعتماد AWS الخاصة بك كملف تعريف. يمكنك التحقق مرة أخرى من ذلك عن طريق فتح ملف ~ / .aws / أوراق الاعتماد . يجب أن تتكون من ملفات تعريف AWS. حاليًا ، في المثال أدناه ، هو واحد فقط - المثال الذي أنشأناه:

aws- أوراق اعتماد- ملف

عمل رائع حتى الآن! يمكنك المتابعة بإنشاء نموذج تطبيق واحد باستخدام NodeJS وقوالب البدء المضمنة.

ملاحظة: علاوة على ذلك ، في المقالة ، نستخدم الأمر sls ، وهو اختصار لـ serverless .
قم بإنشاء دليل فارغ وأدخله. قم بتشغيل الأمر

ls create --template aws-nodejs

باستخدام الأمر create template ، حدد أحد القوالب المتاحة ، في هذه الحالة ، aws-nodejs ، وهو تطبيق قالب NodeJS “Hello world”.

sls- إنشاء

بمجرد الانتهاء ، يجب أن يتكون دليلك مما يلي ، ويبدو مثل هذا:

sls- إنشاء ملفات

لقد أنشأنا الملفات الجديدة handler.js و serverless.yml .

يخزن ملف handler.js وظيفتك (وظائفك) ، ويقوم serverless.yml بتخزين خصائص التكوين التي ستقوم بتغييرها لاحقًا. إذا كنت تتساءل ما هو ملف .yml ، باختصار ، فهو لغة تسلسل بيانات يمكن قراءتها بواسطة الإنسان . من الجيد أن تكون على دراية به ، حيث يتم استخدامه عند إدخال أي معلمات تكوين. لكن دعونا نلقي نظرة على ما لدينا في ملف serverless.yml الآن:

 الخدمة: تطبيق AWS-sample
مزود:
  الاسم: aws
  وقت التشغيل: nodejs12.x
المهام:
  أهلا:
    المعالج: معالج
  • الخدمة: - اسم خدمتنا.
  • المزود: - كائن يحتوي على خصائص الموفر ، وكما نرى هنا ، فإن مزودنا هو AWS ، ونحن نستخدم وقت تشغيل NodeJS.
  • الوظائف: - هو كائن يحتوي على جميع الوظائف التي يمكن نشرها في Lambda. في هذا المثال ، لدينا وظيفة واحدة تسمى hello تشير إلى دالة handler.js hello.

عليك أن تفعل شيئًا مهمًا هنا قبل متابعة نشر التطبيق. في وقت سابق ، قمنا بتعيين بيانات اعتماد AWS مع ملف تعريف (أطلقنا عليه اسم مسؤول بدون خادم ). الآن كل ما عليك فعله هو إخبار التكوين بدون خادم لاستخدام ملف التعريف ومنطقتك. افتح serverless.yml وتحت خاصية الموفر أسفل وقت التشغيل مباشرة ، أدخل هذا:

 الملف الشخصي: serverless- مشرف
المنطقة: شرق الولايات المتحدة 2

في النهاية ، يجب أن يكون لدينا هذا:

 مزود:
  الاسم: aws
  وقت التشغيل: nodejs12.x
  الملف الشخصي: serverless- مشرف
  المنطقة: شرق الولايات المتحدة 2

ملاحظة: للحصول على المنطقة ، من الطرق السهلة البحث عن عنوان URL عند تسجيل الدخول إلى وحدة التحكم: مثال:

منطقة AWS

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

sls invoke local -f hello

يستدعي الوظيفة (ولكن محليًا فقط!) ، ويعيد الإخراج إلى وحدة التحكم:

sls- استدعاء المحلية

الآن ، إذا سارت الأمور على ما يرام ، يمكنك محاولة نشر وظيفتك في AWS Lambda .

إذن ، هل كان ذلك معقدًا؟ لا ، لم يكن! بفضل نظام Serverless Framework ، فهو مجرد رمز من سطر واحد:

sls deploy -v

انتظر حتى ينتهي كل شيء ، قد يستغرق الأمر بضع دقائق ، إذا كان كل شيء على ما يرام ، يجب أن تنتهي بشيء مثل هذا:

sls-نشر-منتهية

الآن دعنا نتحقق مما حدث في AWS. انتقل إلى Lambda (في " بحث عن خدمات " اكتب Lambda ) ، وسترى إنشاء وظيفة Lambda الخاصة بك.

خلق أوس لامدا

يمكنك الآن محاولة استدعاء وظيفتك من AWS Lambda. في نوع المحطة
sls invoke -f hello
يجب أن يُرجع نفس الناتج كما كان سابقًا (عندما نختبر محليًا):

sls- استدعاء

يمكنك التحقق من تشغيل وظيفة AWS عن طريق فتح الوظيفة في AWS Lambda والانتقال إلى علامة التبويب " المراقبة " والنقر فوق " عرض السجلات في CloudWatch". ".

سجلات لامدا كلاودواتش

يجب أن يكون لديك سجل واحد هناك.

الآن ، هناك شيء واحد لا يزال مفقودًا في التطبيق الخاص بك ، ولكن ما هو ...؟ حسنًا ، ليس لديك نقطة نهاية للوصول إلى تطبيقك ، لذلك دعونا ننشئ ذلك باستخدام AWS API Gateway.

يجب عليك فتح ملف serverless.yml وتنظيف التعليقات أولاً. تحتاج إلى إضافة خاصية الأحداث إلى وظيفتنا وتحت خاصية http الخاصة بها. هذا يخبر إطار العمل Serverless بإنشاء بوابة API وإرفاقها بوظيفة Lambda عند نشر التطبيق. يجب أن ينتهي ملف التكوين الخاص بنا بهذا:

 الخدمة: تطبيق AWS-sample
مزود:
  الاسم: aws
  وقت التشغيل: nodejs12.x
  الملف الشخصي: serverless- مشرف
  المنطقة: شرق الولايات المتحدة 2
المهام:
  أهلا:
    المعالج: معالج
    الأحداث:
      - http:
          المسار: / مرحبًا
          الطريقة: الحصول على

في http نحدد المسار وطريقة HTTP.
هذا كل شيء ، دعنا ننشر تطبيقنا مرة أخرى عن طريق تشغيل sls deploy -v

بمجرد الانتهاء ، يجب أن يظهر شيء جديد في محطة الإخراج ، وهذه هي نقطة النهاية التي تم إنشاؤها:

نقطة نهاية http

لنفتح نقطة النهاية:

تنفيذ نقطة نهاية http

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

افتح AWS Lambda ، وانقر فوق وظيفتك.

بوابة AWS-lambda-api

نرى ضمن علامة التبويب " المصمم " أن لدينا بوابة API متصلة بـ Lambda ونقطة نهاية API.

رائعة! لقد أنشأت تطبيقًا بسيطًا للغاية بدون خادم ونشرته في AWS Lambda واختبرت وظائفه. أضفنا أيضًا نقطة نهاية باستخدام AWS API Gateway .

4. كيفية تشغيل التطبيق دون اتصال بالإنترنت

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

يحاكي المكون الإضافي AWS Lambda و API Gateway على جهازك المحلي / جهاز التطوير. يبدأ خادم HTTP الذي يتعامل مع الطلبات ويستدعي معالجاتك.

لتثبيت المكون الإضافي ، قم بتشغيل الأمر أدناه في دليل التطبيق

npm install serverless-offline --save-dev

ثم داخل ملف serverless.yml الخاص بالمشروع ، افتح الملف وأضف خاصية الإضافات :

 الإضافات:
  - خادم غير متصل

يجب أن يبدو التكوين كما يلي:

 الخدمة: تطبيق AWS-sample
مزود:
  الاسم: aws
  وقت التشغيل: nodejs12.x
  الملف الشخصي: serverless- مشرف
  المنطقة: شرق الولايات المتحدة 2
المهام:
  أهلا:
    المعالج: معالج
    الأحداث:
      - http:
          المسار: / مرحبًا
          الطريقة: الحصول على
الإضافات:
  - خادم غير متصل

للتحقق من أننا قد نجحنا في تثبيت وتكوين تشغيل المكون الإضافي

sls --verbose

يجب أن ترى هذا:

sls- مطوّل

الآن في جذر مشروعك ، قم بتشغيل الأمر

sls offline

sls غير متصل

كما ترى ، يستمع خادم HTTP على المنفذ 3000 ، ويمكنك الوصول إلى وظائفك ، على سبيل المثال ، لدينا هنا http: // localhost: 3000 / dev / hello لوظيفة hello الخاصة بنا. الافتتاح أن لدينا نفس الاستجابة من بوابة API ، التي أنشأناها سابقًا.

sls غير متصل 2

أضف Google BigQuery Integration

BigQuery

لقد قمت بعمل رائع حتى الآن! لديك تطبيق يعمل بشكل كامل باستخدام Serverless. دعنا نوسع تطبيقنا ونضيف تكامل BigQuery إليه لنرى كيف يعمل وكيف يتم التكامل.

BigQuery هو برنامج بدون خادم كخدمة (SaaS) ، وهو عبارة عن مستودع بيانات سريع وفعال من حيث التكلفة يدعم الاستعلام. قبل أن نواصل دمجها مع تطبيق NodeJS الخاص بنا ، يتعين علينا إنشاء حساب ، لذلك دعنا نتابع.

1. إعداد Google Cloud Console

انتقل إلى https://cloud.google.com وقم بتسجيل الدخول باستخدام حسابك ، إذا لم تكن قد قمت بذلك بالفعل - قم بإنشاء حساب وتابع.

عند تسجيل الدخول إلى Google Cloud Console ، يجب عليك إنشاء مشروع جديد. انقر على النقاط الثلاث بجوار الشعار وستفتح نافذة مشروطة حيث تختار " مشروع جديد". "

إنشاء مشروع gc

أدخل اسمًا لمشروعك. سنستخدم BigQuery-example . بمجرد إنشاء المشروع ، انتقل إلى BigQuery باستخدام الدرج:

gc-bq

عند تحميل BigQuery ، على الجانب الأيسر ، سترى بيانات المشروع التي يمكنك الوصول إليها ، وكذلك مجموعات البيانات العامة. نحن نستخدم مجموعة بيانات عامة لهذا المثال. يطلق عليه covid19_ecdc :

مجموعة بيانات bigquery-covid

العب حول مجموعة البيانات والجداول المتاحة. معاينة البيانات فيه. هذه مجموعة بيانات عامة يتم تحديثها كل ساعة وتحتوي على معلومات حول بيانات COVID-19 حول العالم.

يتعين علينا إنشاء مستخدم IAM -> حساب الخدمة حتى نتمكن من الوصول إلى البيانات. لذلك ، في القائمة ، انقر على "IAM & Admin" ، ثم "حسابات الخدمة".

bq- حساب الخدمة

انقر فوق الزر "إنشاء حساب خدمة" ، وأدخل اسم حساب الخدمة وانقر على "إنشاء". بعد ذلك ، انتقل إلى " أذونات حساب الخدمة" ، وابحث عن "BigQuery Admin" واختره .

bq-service-account-أذونات

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

تم إنشاء حساب bigquery-service-account

الآن ، سوف نستخدم بيانات الاعتماد التي تم إنشاؤها هنا لتوصيل مكتبة NodeJS BigQuery.

2. قم بتثبيت مكتبة NodeJS BigQuery

ستحتاج إلى تثبيت مكتبة BigQuery NodeJS لاستخدامها في المشروع الذي أنشأته للتو. قم بتشغيل الأوامر أدناه في دليل التطبيق:

أولاً ، قم بتهيئة npm بتشغيل npm init

املأ جميع الأسئلة وتابع تثبيت مكتبة BigQuery :
npm install @google-cloud/bigquery

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

افتح serverless.yml ، وفي خاصية الموفر أضف خاصية بيئة مثل هذا:

 بيئة:
PROJECT_ID: $ {ملف (./ config / bigquery-config.json): project_id}
CLIENT_EMAIL: $ {ملف (./ config / bigquery-config.json): client_email}
PRIVATE_KEY: $ {ملف (./ config / bigquery-config.json): private_key}

قم بإنشاء متغيرات بيئة PROJECT_ID و PRIVATE_KEY و CLIENT_EMAIL ، والتي تأخذ نفس الخصائص (الأحرف الصغيرة) من ملف JSON الذي أنشأناه. لقد وضعناه في مجلد التكوين وأطلقنا عليه اسم bigquery-config.json .

الآن ، يجب أن ينتهي بك الأمر بملف serverless.yml يبدو كالتالي:

 الخدمة: تطبيق AWS-sample
مزود:
  الاسم: aws
  وقت التشغيل: nodejs12.x
  الملف الشخصي: serverless- مشرف
  المنطقة: شرق الولايات المتحدة 2
  بيئة:
    PROJECT_ID: $ {ملف (./ config / bigquery-config.json): project_id}
    CLIENT_EMAIL: $ {ملف (./ config / bigquery-config.json): client_email}
    PRIVATE_KEY: $ {ملف (./ config / bigquery-config.json): private_key}
المهام:
  أهلا:
    المعالج: معالج
    الأحداث:
      - http:
          المسار: / مرحبًا
          الطريقة: الحصول على
الإضافات:
  - خادم غير متصل

افتح الآن handler.js ودعنا نستورد مكتبة BigQuery ، وأضف السطر التالي في الجزء العلوي من الملف ضمن "use strict"

const {BigQuery} = require('@google-cloud/bigquery');

الآن علينا إخبار مكتبة BigQuery بأوراق الاعتماد. لهذا الغرض ، أنشئ ثابتًا جديدًا يقوم بإنشاء مثيل BigQuery باستخدام بيانات الاعتماد:

 const bigQueryClient = BigQuery جديد ({
    معرف المشروع: process.env.PROJECT_ID ،
    أوراق اعتماد: {
        client_email: process.env.CLIENT_EMAIL ،
        private_key: process.env.PRIVATE_KEY
    }
}) ؛

بعد ذلك ، دعنا ننشئ استعلام BigQuery SQL. نريد استرداد أحدث المعلومات حول حالات COVID-19 لبلغاريا. نحن نستخدم محرر استعلام BigQuery لاختباره قبل المتابعة ، لذلك أنشأنا استعلامًا مخصصًا:

 حدد * من `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` حيث المكان الجغرافي_ الترتيب حسب التاريخ DESC LIMIT 1 

نتائج الاستعلام bigquery

جيد! الآن دعونا ننفذ ذلك في تطبيق NodeJS الخاص بنا.
افتح handler.js والصق الكود أدناه

 استعلام const = 'SELECT * FROM `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` WHERE geo_id = \' BG \ 'ORDER BY date DESC LIMIT 1' ؛
خيارات const = {
    الاستعلام: الاستعلام
}

const [job] = انتظار bigQueryClient.createQueryJob (خيارات) ؛
const [rows] = انتظار job.getQueryResults () ،

لقد أنشأنا ثوابت الاستعلام والخيارات . ثم نواصل تشغيل الاستعلام كوظيفة واسترداد النتائج من ذلك.

لنقم أيضًا بتغيير معالج الإرجاع لإرجاع الصفوف التي تم إنشاؤها من الاستعلام:

 إرجاع {
    رمز الحالة: 200 ،
    الجسم: JSON.stringify (
        {
            صفوف
        } ،
        باطل،
        2
    ) ،
} ؛

لنرى المعالج الكامل js :

 "استخدام صارم" ؛

const {BigQuery} = تتطلب ('@ google-cloud / bigquery') ؛
const bigQueryClient = BigQuery جديد ({
    معرف المشروع: process.env.PROJECT_ID ،
    أوراق اعتماد: {
        client_email: process.env.CLIENT_EMAIL ،
        private_key: process.env.PRIVATE_KEY
    }
}) ؛

module.exports.hello = حدث غير متزامن => {
    استعلام const = 'SELECT * FROM `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide` WHERE geo_id = \' BG \ 'ORDER BY date DESC LIMIT 1' ؛
    خيارات const = {
        الاستعلام: الاستعلام
    }

    const [job] = انتظار bigQueryClient.createQueryJob (خيارات) ؛
    const [rows] = انتظار job.getQueryResults () ،

    إرجاع {
        رمز الحالة: 200 ،
        الجسم: JSON.stringify (
            {
                صفوف
            } ،
            باطل،
            2
        ) ،
    } ؛
} ؛

تمام! دعنا نختبر وظيفتنا محليًا:
sls invoke local -f hello
يجب أن نرى الناتج:

bigquery-hello-invoke

تابع نشر التطبيق لاختباره عبر نقاط نهاية HTTP ، لذا قم بتشغيل sls deploy -v

انتظر حتى ينتهي وافتح نقطة النهاية. ها هي النتائج:

نقطة نهاية bigquery

أتقنه! لدينا الآن تطبيق لاسترداد البيانات من BigQuery وإرجاع الرد! دعنا نتحقق أخيرًا من أنه يعمل دون اتصال بالإنترنت. قم بتشغيل sls offline

وقم بتحميل نقطة النهاية المحلية:

bigquery غير متصل

أحسنت عمل. لقد اقتربنا من نهاية العملية. الخطوة الأخيرة هي تغيير التطبيق والسلوك قليلاً. بدلاً من AWS API Gateway ، نريد استخدام Application Load Balancer . دعونا نرى كيفية تحقيق ذلك في الفصل التالي.

ALB - Application Load Balancer في AWS

لقد أنشأنا تطبيقنا باستخدام AWS API Gateway. في هذا الفصل ، سنغطي كيفية استبدال بوابة API بـ Application Load Balancer (ALB).

أولاً ، دعنا نرى كيف يعمل موازن تحميل التطبيق مقارنةً ببوابة API:

في موازن تحميل التطبيق ، نقوم بتعيين مسار (مسارات) محدد (على سبيل المثال ، / hello / ) لمجموعة مستهدفة - مجموعة من الموارد ، في حالتنا ، وظيفة Lambda .

يمكن أن تحتوي المجموعة المستهدفة على دالة Lambda واحدة فقط مرتبطة بها. كلما احتاجت المجموعة المستهدفة إلى الاستجابة ، يرسل موازن تحميل التطبيق طلبًا إلى Lambda ، ويجب أن تستجيب الوظيفة بكائن استجابة. مثل بوابة API ، يتعامل ALB مع جميع طلبات HTTP (s).

توجد بعض الاختلافات بين ALB وبوابة API . يتمثل أحد الاختلافات الرئيسية في أن بوابة API تدعم HTTPS (SSL) فقط ، بينما يدعم ALB كلاً من HTTP و HTTPS.

ولكن ، دعنا نرى بعض إيجابيات وسلبيات بوابة API:

بوابة API:

الايجابيات:

  • أمان ممتاز.
  • إنه سهل التنفيذ.
  • إنه سريع للنشر ومن الجيد أن تبدأ في دقيقة واحدة.
  • قابلية التوسع والتوافر.

سلبيات:

  • يمكن أن يصبح مكلفًا للغاية عند مواجهة حركة مرور عالية.
  • يتطلب المزيد من التنسيق ، مما يضيف مستوى من الصعوبة للمطورين.
  • يمكن أن يؤثر تدهور الأداء ، بسبب سيناريوهات واجهة برمجة التطبيقات ، على سرعة التطبيق وموثوقيته.

دعنا نواصل إنشاء ALB والتبديل إليه بدلاً من استخدام بوابة API:

1. ما هو ALB؟

يسمح موازن تحميل التطبيق للمطور بتكوين حركة المرور الواردة وتوجيهها. إنها إحدى سمات " موازنة الحمل المرنة". إنه بمثابة نقطة اتصال واحدة للعملاء ، ويوزع حركة مرور التطبيقات الواردة عبر أهداف متعددة ، مثل مثيلات EC2 في مناطق متعددة.

2. أنشئ Application Load Balancer باستخدام AWS UI

لنقم بإنشاء Application Load Balancer (ALB) من خلال واجهة المستخدم في Amazon AWS. سجّل الدخول إلى AWS Console في " البحث عن الخدمات. اكتب " EC2 " وابحث عن " موازن التحميل". "

أوس ألب

انقر على " إنشاء موازن التحميل " ، ضمن " موازن تحميل التطبيق " ، اختر " إنشاء ". للحصول على اسم ، أدخل اختيارك ، لقد استخدمنا " sample-alb" ، واختر Scheme " internet-Facing " ، ونوع عنوان IP IPv4.

في " المستمعون " ، اترك الأمر كما هو - HTTP والمنفذ 80. يمكن تهيئته لـ HTTPS ، على الرغم من أنه يجب أن يكون لديك مجال وتأكيده قبل أن تتمكن من استخدام HTTPS.

مناطق التوفر - بالنسبة إلى VPC ، اختر المنطقة التي لديك من القائمة المنسدلة وحدد جميع " مناطق التوفر" :

aws-alb-create1

انقر فوق " التالي تكوين إعدادات الأمان " لمطالبتك بتحسين أمان موازن التحميل. انقر فوق {التالي.

في " الخطوة 3. تكوين مجموعات الأمان " ، عند تعيين مجموعة أمان لاختيار "إنشاء مجموعة أمان جديدة". تابع بعد ذلك بالنقر على " التالي: تكوين التوجيه. ". في الخطوة 4 ، قم بتكوينه كما هو موضح في لقطة الشاشة أعلاه:

AWS- ألب- التوجيه

انقر فوق التالي والتالي وإنشاء .

ارجع إلى موازين التحميل وانسخ ARN كما هو موضح في لقطة الشاشة:

aws-alb-arn

الآن يتعين علينا تغيير serverless.yml وإزالة خاصية http API Gateway. ضمن خاصية الأحداث ، أزل خاصية http وأضف خاصية ألب. يجب أن ينتهي كائن الوظيفة على النحو التالي:

 أهلا:
  المعالج: معالج
  الأحداث:
    - ألب:
        listenerArn: arn: aws: elasticloadbalancing: us-east-2: 115129174008: listener / app / sample-alb / ae6e398a898c48e6 / 67ce6bf319d0513d
        الأولوية 1
        الظروف:
          المسار: / مرحبًا

احفظ الملف وقم بتشغيل الأمر لنشر التطبيق
sls deploy -v

بعد النشر بنجاح ، ارجع إلى AWS Load Balancers وابحث عن اسم DNS الخاص بك كما هو موضح في لقطة الشاشة:

aws-alb-dns

انسخ اسم DNS وأدخل المسار / مرحبًا .

يجب أن يعمل وسيوفر لك في النهاية خيار تنزيل المحتوى :). حتى الآن ، يعمل موازن تحميل التطبيق بشكل رائع ، ولكن يحتاج التطبيق إلى إرجاع استجابة مناسبة لمستخدمينا النهائيين. للقيام بذلك ، افتح handler.js واستبدل عبارة الإرجاع بالعبارة التالية:

 إرجاع {
    رمز الحالة: 200 ،
    الحالةالوصف: "200 موافق" ،
    الرؤوس: {
        "نوع المحتوى": "application / json"
    } ،
    isBase64 مشفرة: خطأ ،
    نص: JSON.stringify (صفوف)
}

يتمثل الاختلاف في ALB في أن الاستجابة يجب أن تتضمن حالة الحاوية الوصف ، والعناوين ، و isBase64Encoded. يرجى حفظ الملف ونشره مرة أخرى ، ولكن هذه المرة ليس التطبيق بأكمله ، ولكن بدلاً من ذلك ، فقط الوظيفة التي قمنا بتغييرها. قم بتشغيل الأمر أدناه:
sls deploy -f hello

بهذه الطريقة ، نحن نحدد فقط الوظيفة مرحبًا للنشر. بعد النشر بنجاح ، قم بزيارة اسم DNS مع المسار مرة أخرى ، ويجب أن يكون لديك استجابة مناسبة!

استجابة aws-alb

رائعة! الآن قمنا باستبدال بوابة API بـ Application Load Balancer. موازن تحميل التطبيق أرخص من API Gateway ، ويمكننا الآن توسيع تطبيقنا لتلبية احتياجاتنا ، خاصة إذا كنا نتوقع زيادة حركة المرور.

الكلمات الأخيرة

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