يمكنك نشر الدوال وحذفها وتعديلها باستخدام أوامر Firebase CLI. أو من خلال ضبط خيارات بيئة التشغيل في رمز المصدر الخاص بالدوال.
دوال النشر
لنشر الدوال، عليك تشغيل الأمر Firebase CLI:
firebase deploy --only functions
ينشر واجهة سطر الأوامر Firebase تلقائيًا جميع الدوال
المصدر في نفس الوقت. إذا كان مشروعك يحتوي على أكثر من 5 دوال،
ننصحك باستخدام علامة --only
مع أسماء وظائف معيّنة
لنشر الدوال التي
التي قمتَ بتحريرها. نشر دوال محددة
فإن ذلك يؤدي إلى تسريع عملية النشر ويساعدك على تجنب الوقوع في
حصص النشر. على سبيل المثال:
firebase deploy --only functions:addMessage,functions:makeUppercase
عند نشر أعداد كبيرة من الدوال، قد تتجاوز حصة معيارية وتلقى رسائل خطأ HTTP 429 أو 500. لحل المشكلة فإن ذلك، يؤدي إلى نشر الدوال في مجموعات مكونة من 10 أشخاص أو أقل.
يمكنك الاطّلاع على مرجع واجهة سطر الأوامر Firebase للحصول على قائمة كاملة بالسمات المتاحة الأوامر.
بشكل تلقائي، يظهر واجهة سطر الأوامر Firebase في مجلد functions/
عن
رمز المصدر. يمكنك تنظيم الدوال إذا كنت تفضّل ذلك.
في قواعد رموز برمجية أو مجموعات
متعددة من الملفات.
حذف الدوال
يمكنك حذف الدوال المنشورة سابقًا بالطرق التالية:
- بشكل صريح في واجهة سطر الأوامر Firebase مع
functions:delete
- بشكل صريح في وحدة تحكّم Google Cloud.
- ضمنيًا عن طريق إزالة الدالة من المصدر قبل النشر.
جميع عمليات الحذف التأكيد قبل إزالة الدالة من الإنتاج.
يتيح حذف الدالة الفاضح في واجهة سطر الأوامر Firebase استخدام الوسيطات المتعددة. بالإضافة إلى الدوال وتسمح لك بتحديد دالة تعمل في منطقة معينة. ويمكنك أيضًا إلغاء طلب التأكيد.
# Delete all functions that match the specified name in all regions. firebase functions:delete myFunction
# Delete a specified function running in a specific region. firebase functions:delete myFunction --region us-east-1
# Delete more than one function firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group. firebase functions:delete groupA
# Bypass the confirmation prompt. firebase functions:delete myFunction --force
من خلال حذف الدالة الضمنية، يحلّل firebase deploy
المصدر
إزالة أي وظائف تمت إزالتها من الملف من الإنتاج.
تعديل اسم دالة أو منطقتها أو عامل تشغيلها
إذا كنت تقوم بإعادة تسمية أو تغيير مناطق أو تشغيل الدوال التي لمعالجة حركة بيانات الإنتاج، يمكنك اتّباع الخطوات الواردة في هذا القسم لتجنّب فقدان الأحداث أثناء التعديل. قبل اتباع هذه الخطوات، تأكد أولاً من أن الدالة idempoent، (معتمدة)، لأنّ سيتم تشغيل كل من الإصدارين الجديد والقديم من الدالة على نفس الوقت أثناء التغيير.
إعادة تسمية دالة
لإعادة تسمية دالة، أنشئ نسخة جديدة تمت إعادة تسميتها للدالة في المستند المصدر.
ثم تشغيل أمرين منفصلين للنشر. ينشر الأمر الأول
الدالة المسماة حديثًا، وسيزيل الأمر الثاني الدالة المنشورة سابقًا
. على سبيل المثال، إذا كانت لديك دالة Node.js
يُسمى webhook
وتريد
إلى webhookNew
، راجع الرمز على النحو التالي:
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookNew = functions.https.onRequest((req, res) => {
res.send("Hello");
});
بعد ذلك، شغّل الأوامر التالية لنشر الدالة الجديدة:
# Deploy new function called webhookNew firebase deploy --only functions:webhookNew # Wait until deployment is done; now both webhookNew and webhook are running # Delete webhook firebase functions:delete webhook
تغيير منطقة الدالة أو مناطقها
في حال تغيير المناطق المحدَّدة التي تتعامل مع حركة بيانات الإنتاج، فيمكنك منع فقدان الحدث من خلال تنفيذ هذه الخطوات بالترتيب:
- أعد تسمية الدالة، وغيّر منطقتها أو مناطقها كما هو مطلوب.
- نشر الدالة المُعاد تسميتها، ما يؤدي إلى تشغيل الرمز نفسه مؤقتًا في كلتا المجموعتَين من المناطق
- احذف الدالة السابقة.
على سبيل المثال، إذا كانت لديك دالة
يُسمى webhook
ومتوفر حاليًا
منطقة الدوال التلقائية في us-central1
، وتريد نقلها إلى
asia-northeast1
، يجب أولاً تعديل رمز المصدر لإعادة تسمية
وتنقيح المنطقة.
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions
.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookAsia = functions
.region('asia-northeast1')
.https.onRequest((req, res) => {
res.send("Hello");
});
بعد ذلك، يمكنك النشر من خلال التشغيل:
firebase deploy --only functions:webhookAsia
هناك الآن دالتان متطابقتان قيد التشغيل: webhook
قيد التشغيل في us-central1
،
وwebhookAsia
قيد التشغيل في asia-northeast1
.
بعد ذلك، يمكنك حذف "webhook
":
firebase functions:delete webhook
الآن، هناك دالة واحدة فقط - webhookAsia
، وهي قيد التشغيل في asia-northeast1
.
تغيير نوع مشغل الدالة
أثناء تطوير عملية نشر "Cloud Functions for Firebase" بمرور الوقت، يمكنك بحاجة إلى تغيير نوع مشغل الدالة لأسباب مختلفة. على سبيل المثال: ننصحك بالتغيير من أحد أنواع Firebase Realtime Database أو حدث Cloud Firestore إلى نوع آخر.
لا يمكن تغيير نوع حدث الدالة فقط من خلال تغيير
رمز المصدر وتشغيل firebase deploy
. لتجنب الأخطاء،
تغيير نوع مشغل الدالة من خلال هذا الإجراء:
- عدِّل رمز المصدر لتضمين دالة جديدة بنوع المشغِّل المطلوب.
- نشر الدالة، ما يؤدي إلى تشغيل الدالتَين القديمة والجديدة مؤقتًا
- احذف الدالة القديمة من عملية الإنتاج صراحةً باستخدام واجهة سطر الأوامر Firebase.
على سبيل المثال، إذا كانت لديك دالة Node.js تُعرف باسم objectChanged
وتتضمن الواجهة القديمة
نوع الحدث onChange
، وتريد تغييره إلى onFinalize
، يُرجى إعادة التسمية أولاً
الدالة وعدِّلها للحصول على نوع الحدث onFinalize
.
// before
const functions = require('firebase-functions/v1');
exports.objectChanged = functions.storage.object().onChange((object) => {
return console.log('File name is: ', object.name);
});
// after
const functions = require('firebase-functions/v1');
exports.objectFinalized = functions.storage.object().onFinalize((object) => {
return console.log('File name is: ', object.name);
});
بعد ذلك، شغِّل الأوامر التالية لإنشاء الدالة الجديدة أولاً، قبل حذف الدالة القديمة:
# Create new function objectFinalized firebase deploy --only functions:objectFinalized # Wait until deployment is done; now both objectChanged and objectFinalized are running # Delete objectChanged firebase functions:delete objectChanged
ضبط خيارات بيئة التشغيل
يتيح لك Cloud Functions for Firebase تحديد خيارات بيئة التشغيل، مثل Node.js. إصدار بيئة التشغيل ومهلة كل دالة، وتخصيص الذاكرة، والحد الأدنى/الحد الأقصى لمثيلات الوظائف.
كإحدى أفضل الممارسات، يجب ضبط هذه الخيارات (باستثناء إصدار Node.js) على
كائن تهيئة داخل رمز الدالة. هذا النمط
RuntimeOptions
هو مصدر الحقيقة لخيارات وقت تشغيل الدالة،
إلغاء الخيارات التي تم ضبطها باستخدام أي طريقة أخرى (مثل استخدام "وحدة تحكُّم Google Cloud"
أو gcloud CLI).
وإذا كان سير عمل التطوير يتضمن ضبط خيارات بيئة التشغيل يدويًا من خلال
Google Cloud Console أو gcloud CLI ولا تريد استخدام هذه القيم
يتم تجاوزها في كل عملية نشر، اضبط الخيار preserveExternalChanges
على true
.
عند ضبط هذا الخيار على true
، يدمج Firebase خيارات وقت التشغيل المعيّنة في
بإعدادات النسخة المنشورة حاليًا من الدالة
الأولوية التالية:
- تم ضبط الخيار في رمز الدوال: يمكنك إلغاء التغييرات الخارجية.
- تم ضبط الخيار على
RESET_VALUE
في رمز الدوال: يمكنك إلغاء التغييرات الخارجية باستخدام القيمة التلقائية. - لم يتم ضبط الخيار في رمز الدوال، ولكن تم ضبطه في دالة منشورة حاليًا: استخدِم الخيار المحدّد في الدالة المنشورة.
استخدام الخيار preserveExternalChanges: true
لا يُنصَح به
لمعظم السيناريوهات لأن
المصدر الكامل لخيارات بيئة التشغيل
الأخرى. في حال استخدامه، تحقَّق من وحدة تحكّم Google Cloud أو استخدِم
واجهة سطر الأوامر لعرض التهيئة الكاملة للدالة.
ضبط إصدار Node.js
تتيح حزمة تطوير البرامج (SDK) Firebase لنظام Cloud Functions اختيار وقت تشغيل Node.js. يمكنك اختيار تنفيذ جميع الدوال في مشروع حصريًا في بيئة التشغيل. بيئة تتوافق مع أحد إصدارات Node.js المتوافقة هذه:
- Node.js 20 (معاينة)
- Node.js 18
- Node.js 16
- Node.js 14
لضبط إصدار Node.js:
يمكنك ضبط الإصدار في الحقل "engines
" في package.json
.
ملف تم إنشاؤه في دليل functions/
أثناء الإعداد.
على سبيل المثال، لاستخدام فقط
الإصدار 18، عدِّل هذا السطر في "package.json
":
"engines": {"node": "18"}
إذا كنت تستخدم مدير حزمة Yarn أو لديك متطلبات محددة أخرى
في الحقل engines
، يمكنك ضبط وقت تشغيل حزمة تطوير البرامج (SDK) Firebase الخاصة بـ Cloud Functions في
firebase.json
بدلاً من ذلك:
{
"functions": {
"runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
}
}
يستخدم واجهة سطر الأوامر القيمة المعينة في firebase.json
لصالح أي قيمة أو
نطاق تضبطه بشكل منفصل في package.json
.
ترقية وقت تشغيل Node.js
لترقية بيئة تشغيل Node.js:
- تأكد من أن مشروعك على خطة أسعار Blaze:
- يُرجى التأكّد من استخدام الإصدار 11.18.0 من واجهة سطر الأوامر Firebase أو إصدار أحدث.
- يمكنك تغيير قيمة
engines
في ملفpackage.json
الذي تم إنشاؤه في. دليلfunctions/
أثناء الإعداد. على سبيل المثال، إذا كنت بصدد الترقية من الإصدار 16 إلى الإصدار 18، فإن إدخال من المفترض أن تظهر بالشكل التالي:"engines": {"node": "18"}
- يمكنك اختياريًا اختبار التغييرات باستخدام Firebase Local Emulator Suite
- إعادة نشر جميع الدوال.
التحكّم في سلوك التحجيم
بشكلٍ تلقائي، يعمل Cloud Functions for Firebase على زيادة عدد مثيلات الجري استنادًا إلى عدد الطلبات الواردة، ومن المحتمل أن يتم خفضها إلى صفر في حالات انخفاض عدد الزيارات. ومع ذلك، إذا كان تطبيقك يتطلب أسعارًا مخفَّضة وقت الاستجابة وأردت تقليل عدد عمليات التشغيل على البارد، يمكنك تغيير السلوك الافتراضي عن طريق تحديد حد أدنى لعدد مثيلات الحاوية التي سيتم دافئ وجاهزًا لتقديم الطلبات.
وبالمثل، يمكنك تعيين حد أقصى لعدد المثيلات في نطاق المثيلات في الاستجابة للطلبات الواردة. استخدام هذا الإعداد كوسيلة للتحكّم في تكاليفك أو للحد من عدد الاتصالات بخدمة الدعم مثل قاعدة البيانات.
تقليل عدد عمليات التشغيل على البارد
لضبط الحد الأدنى لعدد المثيلات لدالة في رمز المصدر، استخدم
runWith
. تقبل هذه الطريقة كائن JSON يتوافق مع
RuntimeOptions
التي تحدد قيمة minInstances
. على سبيل المثال:
تضبط هذه الدالة 5 مثيلات على الأقل للحفاظ على الدفء:
exports.getAutocompleteResponse = functions
.runWith({
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
})
.https.onCall((data, context) => {
// Autocomplete a user's search term
});
إليك بعض النقاط التي يجب مراعاتها عند ضبط قيمة في السمة minInstances
:
- إذا غيّر Cloud Functions for Firebase مستوى أداء تطبيقك بدرجة أكبر من
minInstances
، فستواجه بداية باردة لكل مثيل أعلى من هذا الحد. - تُحدث عمليات بدء التشغيل الباردة الأشد تأثيرًا في التطبيقات التي تشهد حركة مرور حادة. إذا كان
يشهد تطبيقك زيادة كبيرة في عدد الزيارات، وقد ضبطت قيمة
minInstances
عالية بما يكفي ينخفض عدد مرات التشغيل على البارد عند كل زيادة في عدد الزيارات، وستلاحظ زيادة كبيرة زمن انتقال منخفض بالنسبة إلى التطبيقات ذات حركة المرور المستمرة، لا يتم إجراء عمليات التشغيل على البارد من المرجح أن يؤثر ذلك بشكل كبير في الأداء. قد يكون تعيين الحد الأدنى للمثيلات منطقيًا بالنسبة لبيئات الإنتاج، ولكن يجب تجنبها عادةً في بيئات الاختبار. للانتقال إلى الصفر في اختبار المشروع مع الاستمرار في تقليل عمليات التشغيل على البارد في مشروع الإنتاج، يمكن ضبط
minInstances
استنادًا إلى متغير البيئةFIREBASE_CONFIG
:// Get Firebase project id from `FIREBASE_CONFIG` environment variable const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId; exports.renderProfilePage = functions .runWith({ // Keep 5 instances warm for this latency-critical function // in production only. Default to 0 for test projects. minInstances: envProjectId === "my-production-project" ? 5 : 0, }) .https.onRequest((req, res) => { // render some html });
تحديد الحد الأقصى لعدد مثيلات الدالة
لضبط الحد الأقصى للمثيلات في رمز مصدر الدالة، استخدِم
runWith
. تقبل هذه الطريقة كائن JSON يتوافق مع
RuntimeOptions
التي تحدد
لـ maxInstances
. على سبيل المثال، تضبط هذه الدالة حدًا أقصى على 100.
الحالات التي لا تربك فيها قاعدة بيانات افتراضية قديمة:
exports.mirrorOrdersToLegacyDatabase = functions
.runWith({
// Legacy database only supports 100 simultaneous connections
maxInstances: 100,
})
.firestore.document("orders/{orderId}")
.onWrite((change, context) => {
// Connect to legacy database
});
في حال زيادة حجم دالة HTTP إلى الحد الأقصى maxInstances
، يتم تنفيذ الطلبات الجديدة
تم وضعه في قائمة الانتظار لمدة 30 ثانية ثم تم رفضه مع رمز الاستجابة
429 Too Many Requests
في حال عدم توفّر أي مثيل بحلول ذلك الوقت.
للاطّلاع على مزيد من المعلومات عن أفضل الممارسات لاستخدام إعدادات الحدّ الأقصى للمثيلات، يُرجى الاطّلاع على
الخروج من هذه
أفضل الممارسات لاستخدام "maxInstances
"
ضبط المهلة وتخصيص الذاكرة
في بعض الحالات، قد يكون للدوال متطلبات خاصة لمدة طويلة. قيمة أو تخصيص كبير من الذاكرة. يمكنك تعيين هذه القيم إما في Google Cloud Console أو في رمز المصدر الخاص بالدالة (Firebase فقط)
لضبط تخصيص الذاكرة ومهلة في رمز المصدر للدوال، استخدِم
runWith
تم تقديم معلَمة في Firebase SDK للإصدار 2.0.0 من Cloud Functions. يقبل خيار بيئة التشغيل هذا
كائن JSON يتوافق مع
RuntimeOptions
التي تحدد قيم timeoutSeconds
وmemory
.
على سبيل المثال، تستخدم دالة التخزين هذه ذاكرة بسعة 1 غيغابايت وتنتهي مهلتها بعد
300 ثانية:
exports.convertLargeFile = functions
.runWith({
// Ensure the function has enough memory and time
// to process large files
timeoutSeconds: 300,
memory: "1GB",
})
.storage.object()
.onFinalize((object) => {
// Do some complicated things that take a lot of memory and time
});
الحد الأقصى لقيمة timeoutSeconds
هو 540
، أو 9 دقائق.
يتجاوب مقدار الذاكرة الممنوحة لدالة مع وحدة المعالجة المركزية المخصصة
للدالة، كما هو موضح في قائمة القيم الصالحة هذه للدالة memory
:
128MB
— 200 ميغاهرتز256MB
— 400 ميغاهرتز512MB
— 800 ميغاهرتز1GB
: 1.4 غيغاهرتز2GB
— 2.4 غيغاهرتز4GB
: 4.8 غيغاهرتز8GB
: 4.8 غيغاهرتز
لضبط إعدادات تخصيص الذاكرة والمهلة في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:
- في وحدة تحكُّم Google Cloud في Google، اختَر Cloud Functions من القائمة. القائمة اليمنى.
- حدد دالة عن طريق النقر فوق اسمها في قائمة الدوال.
- انقر على رمز تعديل في القائمة العلوية.
- اختَر أحد التخصيصات للذاكرة من القائمة المنسدلة التي تحمل التصنيف الذاكرة المخصّصة.
- انقر على المزيد لعرض الخيارات المتقدمة، وأدخل عدد الثواني في مربع نص المهلة.
- انقر على حفظ لتعديل الدالة.