التطوير المحلي باستخدام دوال السحابة الإلكترونية لبروتوكول Node.js باستخدام ترميز Visual Studio

1. نظرة عامة

Google Cloud Functions هي منصة حوسبة بدون خادم تعتمد على الأحداث. تسمح لك ميزة Cloud Functions بكتابة الرمز البرمجي بدون القلق بشأن توفير الموارد أو التطوير لتلبية المتطلبات المتغيّرة.

يتم تنفيذ دوال السحابة الإلكترونية المكتوبة بلغة JavaScript في بيئة Node.js على Google Cloud Platform. يمكنك تشغيل دالة Cloud في أي وقت تشغيل Node.js عادي لتفعيل إمكانية النقل والاختبار المحلي.

جولة تفصيلية

في هذا الدليل التعليمي حول الرموز البرمجية، ستنشئ دالة Cloud Function لـ Node.js تُبلغك ما إذا كانت درجة الحرارة المحدّدة مقبولة أو مرتفعة جدًا. ستتمكّن من إنشاء دالة Cloud واختبارها وتصحيح أخطائها باستخدام Visual Studio Code على جهازك المحلي. أخيرًا، عليك نشر الدالة على Google Cloud Platform.

المعلومات التي ستطّلع عليها

  • إطار عمل Functions لنظام التشغيل Node.js
  • أنشئ دالة HTTP Cloud Function واختبرَها محليًا.
  • تصحيح أخطاء دالة HTTP من جهازك المحلي.
  • انشر دالة HTTP من جهازك المحلي.

2. الإعداد والمتطلبات

المتطلبات الأساسية

التكلفة

على الرغم من أنّ هذا الدليل التعليمي للترميز لا يتطلّب سوى طلب واحد لإحدى وظائف Cloud Functions المنشورة، يجب الرجوع إلى معلومات أسعار واجهة برمجة التطبيقات Cloud Functions API لفهم آلية عمل الفوترة.

على الرغم من إمكانية استخدام العديد من واجهات Google APIs بدون رسوم، لا يكون استخدام Google Cloud Platform (أي منتجاته وواجهات برمجة التطبيقات) مجانيًا. يجب أن يكون لديك حساب فوترة نشِط لاستخدام Cloud Functions. تجدر الإشارة إلى أنّ بعض منتجات Google Cloud Platform (GCP) توفّر فئة "مجانية دائمًا" يجب تجاوزها لدفع تكاليف الفوترة. لأغراض ورشة رموز البرامج، يتم احتساب كلّ طلب تشغيل لوظائف Cloud ضمن هذه الفئة المجانية. ولن تتحمل أي رسوم، طالما أنك لا تتجاوز حدودها الإجمالية (خلال كل شهر).

3- تثبيت إطار عمل Functions لنظام التشغيل Node.js

إطار عمل الدوال لـ Node.js هو إطار عمل مفتوح المصدر FaaS (الوظيفة كخدمة) لكتابة دوال Node.js المحمولة التي يقدمها لك فريق Google Cloud Functions.

يتيح لك إطار عمل Functions Framework كتابة دوال خفيفة الوزن يتم تشغيلها في العديد من البيئات المختلفة، بما في ذلك:

  • وظائف Google Cloud
  • جهاز التطوير المحلي
  • تشغيل السحابة الإلكترونية وتشغيل السحابة الإلكترونية على GKE
  • البيئات المستندة إلى Knative

أنشئ تطبيقًا جديدًا باستخدام node.js.

npm init

أثناء قبول الإعدادات التلقائية، تأكد من استخدام index.js كنقطة دخول لتطبيقك.

ثبِّت الآن إطار عمل Functions لنظام التشغيل Node.js.

npm install @google-cloud/functions-framework

افتح package.json. تحقق من رؤية إطار عمل الدوال مدرجًا كتبعية كما هو موضح في المثال أدناه.

"dependencies": {
   "@google-cloud/functions-framework": "^1.7.1"
 }

تم الآن تثبيت إطار عمل الدوال بنجاح. أنت الآن جاهز لإنشاء دالة Cloud.

4. إنشاء دالة HTTP Cloud Function واختبارها محليًا

إنشاء دالة Cloud Function على الجهاز

في هذا القسم، ستُنشئ دالة HTTP وتُجري اختبارًا لها تستجيب لطلبات HTTP.

أنشئ ملفًا جديدًا باسم index.js في الدليل نفسه الذي يتضمّن ملف package.json.

أضِف ما يلي:

exports.validateTemperature = async (req, res) => {
 try {
   if (req.body.temp < 100) {
     res.status(200).send("Temperature OK");
   } else {
     res.status(200).send("Too hot");
   }
 } catch (error) {
   //return an error
   console.log("got error: ", error);
   res.status(500).send(error);
 }
};

يمكنك الآن اختبار الدالة.

اختبار الدالة في ترميز Visual Studio

من هذه النقطة فصاعدًا، يستخدم هذا الدرس التطبيقي حول الترميز وحدة التحكّم المدمجة في Visual Studio Code.

في Visual Studio Code، افتح نافذة وحدة طرفية.

شغِّل الأمر التالي:

node node_modules/@google-cloud/functions-framework --target=validateTemperature

يشغِّل هذا الأمر خادمًا محليًا جاهزًا لاستدعاء الدالة validateTemperature عندما يتلقّى الخادم طلب HTTP.

من المفترض أن يظهر لك الإخراج التالي في نافذة وحدة التحكّم:

Serving function...
Function: validateTemperature
URL: http://localhost:8080/

أنشِئ نافذة طرفية ثانية ضمن رمز VS عبر النقر على رمز علامة الجمع New Terminal في لوحة نافذة المحطة الطرفية. ستبدِّل بين نافذتَي الطرفَين التاليتَين: الأولى لعرض الدالة والثانية لاستدعاء الدالة باستخدام curl.

bceb65f366d837ae.png

يمكنك التبديل بين النوافذ الطرفية باستخدام القائمة المنسدلة. إذا كانت نافذة طرفية تؤدي حاليًا وظيفة، تشير القائمة المنسدلة إليها باسم node. وبخلاف ذلك، ستتم الإشارة إلى zsh (أو الواجهة التي تستخدمها).

في نافذة الوحدة الطرفية الثانية، نفِّذ الأمر التالي لإرسال حمولة درجة حرارة تبلغ 50 إلى الخادم المحلي الذي يعرض الدالة validateTemperature.

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"50"}'

يُفترض أن تتلقى الرد التالي من دالة السحابة:

Temperature OK

في نافذة الوحدة الطرفية الثانية، اختبِر الدالة مرة أخرى من خلال إرسال حمولة درجة حرارة "مرتفعة جدًا" كما هو موضّح أدناه:

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"120"}'

يُفترض أن تتلقى الرد التالي من دالة السحابة:

Too hot

أخيرًا، اختبِر الدالة من خلال استدعائها باستخدام حمولة غير متوفّرة.

curl -X POST http://localhost:8080

من المفترض أن يصلك الردّ التالي من دالة السحابة الإلكترونية:

Too hot

من المفترض ألا تعرِض الدالة القيمة "حار جدًا" إذا لم يتم تقديم درجة حرارة. لقد اكتشفت خطأً في الرمز البرمجي.

تأكد من إيقاف تشغيل الدالة من خلال الضغط على Ctrl + C في النافذة الطرفية الأولى التي تعرض الدالة.

5- تصحيح أخطاء دالة HTTP من جهازك المحلي

افتح لوحة الأوامر في Visual Studio Code. إذا كنت تستخدم جهاز Mac، استخدِم Cmd + Shift + P. إذا كنت تستخدم نظام التشغيل Windows، يمكنك استخدام Ctrl + Shift + P..

اكتب auto attach في لوحة الأوامر واختَر العنصر الأول في القائمة.

601e542b4ec9f6f9.png

بالنسبة إلى هذا الدرس التطبيقي، اختَر Only With Flag كما هو موضّح في الصورة أدناه:

b9e6b762d150e62b.png

أعِد الآن تحميل نافذة المحطة الطرفية التي استخدمتها في VS Code لعرض دالتك من خلال تمرير مؤشر الماوس فوق رمز التحذير الذي يظهر في أقصى يسار الشاشة.

انقر على Relaunch Terminal.

37b61e3fb546fc76.png

من نافذة وحدة التحكّم التي تمت إعادة تحميلها، أعِد تشغيل إطار عمل الدوال لعرض الدالة باستخدام الأمر التالي:

node --inspect node_modules/.bin/functions-framework --target=validateTemperature

حيث تطلب العلامة --inspect من Node.js الانتباه إلى برنامج تصحيح الأخطاء. لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Node حول تصحيح الأخطاء.

يُرجى العِلم أنّك تستخدم node_modules/.bin/functions-framework بدلاً من node_modules/@google-cloud/functions-framework. يجب استخدام ملف التشغيل القابل للربط التسلسلي تلقائيًا في ‎/node_modules/.bin لاستخدام وضع الفحص.

من المفترض أن يظهر لك هذه المرة شريط حالة برتقالي في VS Code يشير إلى أنّه تم إرفاق أداة تصحيح الأخطاء.

اضبط نقطة توقُّف في السطر 3 من خلال النقر داخل الهامش على يمين رقم السطر.

2fbb4d5916e1dbfa.png

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

846e6c5993cc87f9.png

في نافذة الوحدة الطرفية الثانية، يمكنك الوصول إلى نقطة التوقف عن طريق تنفيذ الأمر curl التالي.

curl -X POST http://localhost:8080 

سيظهر تمييز أصفر فوق السطر 3. ويشير هذا التمييز إلى أنّ هذا السطر هو العبارة الحالية التي يقيّمها برنامج تصحيح الأخطاء.

206c7ed1eb189e90.png

مرِّر مؤشر الماوس فوق متغيّر الحرارة للتأكّد من أنّ محتواه undefined، لأنّ الطلب لم يوفّر حمولة بيانات درجة الحرارة.

97979025f4bf2842.png

انقر على رمز تخطّي الخطوة لتنفيذ العبارة التالية.

سترى العبارة الحالية تنتقل إلى الجزء الآخر من عبارة if.

cf0e8ce7e0388f98.png

وفي هذا العرض التوضيحي، يمكنك افتراض أن المواصفات تتطلب من جميع الطلبات إرسال قياس درجة الحرارة. في حال عدم توفّر قراءة درجة الحرارة، من المفترض أن تُرسِل الدالة استثناءً.

انقر على الزر "قطع الاتصال" (Disconnect) لقطع الاتصال بينك وبين أداة تصحيح الأخطاء.

1070d059775ad769.png

في نافذة المحطة الطرفية الأولى، أوقِف عرض الدالة من خلال الضغط على Ctrl + C.

عدِّل الدالة لإضافة عبارة if لرمي استثناء إذا كانت درجة الحرارة غير محدّدة كما هو موضّح أدناه:

exports.validateTemperature = async (req, res) => {

 try {

   // add this if statement below line #2
   if (!req.body.temp) {
     throw "Temperature is undefined";
   }

 ...

في النافذة الطرفية الأولى، ابدأ تشغيل الدالة السحابية مرة أخرى من خلال تنفيذ الأمر التالي بدون علامة –inspect لتجنُّب إرفاق برنامج تصحيح الأخطاء.

node node_modules/@google-cloud/functions-framework --target=validateTemperature

تأكَّد من ظهور استثناء من خلال تنفيذ الأمر التالي في نافذة الوحدة الطرفية الثانية:

curl -X POST http://localhost:8080 

من المفترض أن يظهر لك الناتج التالي من طلبك:

Temperature is undefined

في النافذة الطرفية الأولى، سيظهر لك أيضًا الخطأ الذي سجّلته الدالة.

Serving function...
Function: validateTemperature
URL: http://localhost:8080/
got error:  Temperature is undefined

يمكنك الآن إيقاف تشغيل الدالة من خلال الضغط على Ctrl ‏+ C في نافذة الوحدة الطرفية الأولى.

6- نشر دالة HTTP من جهازك المحلي إلى Google Cloud

الآن، وبعد إنشاء دالة Cloud واختبارها وتصحيح أخطائها على جهازك المحلي، أصبحت جاهزًا لنشرها على Google Cloud.

تأكَّد من استخدام المشروع الذي أنشأته في الخطوة 2 على الجهاز عن طريق تشغيل الأمر التالي:

gcloud config get-value project

إذا لم يكن المشروع الذي حدّدته في الخطوة 2 هو الإعداد النشط، نفِّذ الأمر التالي:

gcloud config set project <project-name-created-step-2>

في أي نافذة وحدة طرفية، نفِّذ الأمر التالي:

gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated

حيث يتم شرح المَعلمات على النحو التالي:

  • deploy validateTemperature: الأمر الفرعي gcloud لنشر إحدى وظائف Cloud التي تحمل الاسم validateTemperature مع نقطة دخول باسم validateTemperature
  • --trigger-http: نوع الحدث المشغِّل
  • --runtime nodejs12: وقت التشغيل المستهدَف لهذه الدالة
  • --allow-unauthenticated - السماح بالوصول العلني إلى دالة الاتصال

سيُطلب منك تفعيل واجهات Cloud Functions API. اكتب y لتفعيل واجهات برمجة التطبيقات.

API [cloudfunctions.googleapis.com] not enabled on project 
[1057316433766]. Would you like to enable and retry (this will take a 
few minutes)? (y/N)? y 

بعد اكتمال عملية النشر، سيظهر لك ما يلي في الإخراج:

Deploying function (may take a while - up to 2 minutes)...done. 
availableMemoryMb: 256
buildId: <your-build-id>
entryPoint: validateTemperature
httpsTrigger:
  url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature
...

في نافذة الوحدة الطرفية، استخدِم curl لاستدعاء نقطة النهاية العامة هذه.

curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json"  -d '{"temp":"50"}'

وتأكَّد من نشر وظيفة السحابة الإلكترونية بنجاح من خلال التحقّق من الاستجابة المناسبة.

Temperature OK

7- تَنظيم

لتجنُّب تحصيل رسوم غير مقصودة، مثلاً إذا تم استدعاء هذه الدالة في السحابة الإلكترونية عن غير قصد أكثر من تخصيص استدعاء دالة Cloud الشهري في الفئة المجانية، يمكنك إما حذف "وظيفة السحابة الإلكترونية" أو حذف المشروع الذي أنشأته في الخطوة 2.

لحذف Cloud Function، انتقِل إلى Cloud Function Cloud Console على الرابط https://console.cloud.google.com/functions/ وتأكَّد من أنّ المشروع الذي أنشأته في الخطوة 2 هو المشروع المحدّد حاليًا.

اختَر دالة التحقّق من درجة الحرارة التي نشرتها في الخطوة 6. ثم انقر على "حذف".

4dada486485a935a.png

إذا اخترت حذف المشروع بالكامل، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager، واختيار المشروع الذي أنشأته في الخطوة الثانية، ثم اختيار "حذف". إذا حذفت المشروع، ستحتاج إلى تغيير المشاريع في حزمة تطوير البرامج (SDK) للسحابة الإلكترونية. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تشغيل gcloud projects list.

8. تهانينا!

تهانينا على إكمال ورشة رموز البرامج. يمكنك معرفة المزيد من المعلومات عن كيفية توافق دوال Cloud مع وقت تشغيل Node.js وطريقة عمل تصحيح الأخطاء المحلي مع دوال Cloud.

المواضيع التي تناولناها

  • إطار عمل الدوال لـ Node.js
  • أنشئ دالة HTTP Cloud Function واختبرَها محليًا.
  • تصحيح أخطاء دالة HTTP من جهازك المحلي.
  • انشر دالة HTTP من جهازك المحلي.