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. الإعداد والمتطلبات
المتطلبات الأساسية
- حزمة تطوير البرامج (SDK) للسحابة الإلكترونية
- Visual Studio Code
- Node.js 8.6.0 أو إصدار أحدث (لتثبيت Node.js، استخدِم nvm، وللتحقّق من إصدارك، شغِّل node –version)
- إكمال وظيفتي الأولى: دليل Node.js
التكلفة
على الرغم من أنّ هذا الدليل التعليمي للترميز لا يتطلّب سوى طلب واحد لإحدى وظائف 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.
يمكنك التبديل بين النوافذ الطرفية باستخدام القائمة المنسدلة. إذا كانت نافذة طرفية تؤدي حاليًا وظيفة، تشير القائمة المنسدلة إليها باسم 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
في لوحة الأوامر واختَر العنصر الأول في القائمة.
بالنسبة إلى هذا الدرس التطبيقي، اختَر Only With Flag
كما هو موضّح في الصورة أدناه:
أعِد الآن تحميل نافذة المحطة الطرفية التي استخدمتها في VS Code لعرض دالتك من خلال تمرير مؤشر الماوس فوق رمز التحذير الذي يظهر في أقصى يسار الشاشة.
انقر على Relaunch Terminal
.
من نافذة وحدة التحكّم التي تمت إعادة تحميلها، أعِد تشغيل إطار عمل الدوال لعرض الدالة باستخدام الأمر التالي:
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 من خلال النقر داخل الهامش على يمين رقم السطر.
من المفترض أن يضيء رمز نقطة التوقف باللون الأحمر الزاهي، ما يشير إلى أنّ أداة تصحيح الأخطاء يمكنها الوصول إلى سطر الرمز البرمجي هذا.
في نافذة الوحدة الطرفية الثانية، يمكنك الوصول إلى نقطة التوقف عن طريق تنفيذ الأمر curl التالي.
curl -X POST http://localhost:8080
سيظهر تمييز أصفر فوق السطر 3. ويشير هذا التمييز إلى أنّ هذا السطر هو العبارة الحالية التي يقيّمها برنامج تصحيح الأخطاء.
مرِّر مؤشر الماوس فوق متغيّر الحرارة للتأكّد من أنّ محتواه undefined
، لأنّ الطلب لم يوفّر حمولة بيانات درجة الحرارة.
انقر على رمز تخطّي الخطوة لتنفيذ العبارة التالية.
سترى العبارة الحالية تنتقل إلى الجزء الآخر من عبارة if.
وفي هذا العرض التوضيحي، يمكنك افتراض أن المواصفات تتطلب من جميع الطلبات إرسال قياس درجة الحرارة. في حال عدم توفّر قراءة درجة الحرارة، من المفترض أن تُرسِل الدالة استثناءً.
انقر على الزر "قطع الاتصال" (Disconnect) لقطع الاتصال بينك وبين أداة تصحيح الأخطاء.
في نافذة المحطة الطرفية الأولى، أوقِف عرض الدالة من خلال الضغط على 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. ثم انقر على "حذف".
إذا اخترت حذف المشروع بالكامل، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager، واختيار المشروع الذي أنشأته في الخطوة الثانية، ثم اختيار "حذف". إذا حذفت المشروع، ستحتاج إلى تغيير المشاريع في حزمة تطوير البرامج (SDK) للسحابة الإلكترونية. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تشغيل gcloud projects list.
8. تهانينا!
تهانينا على إكمال ورشة رموز البرامج. يمكنك معرفة المزيد من المعلومات عن كيفية توافق دوال Cloud مع وقت تشغيل Node.js وطريقة عمل تصحيح الأخطاء المحلي مع دوال Cloud.
المواضيع التي تناولناها
- إطار عمل الدوال لـ Node.js
- أنشئ دالة HTTP Cloud Function واختبرَها محليًا.
- تصحيح أخطاء دالة HTTP من جهازك المحلي.
- انشر دالة HTTP من جهازك المحلي.