Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

إدارة نشر الوظائف وخيارات وقت التشغيل

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

نشر الوظائف

لنشر الوظائف ، قم بتشغيل أمر Firebase CLI:

$ firebase deploy --only functions

بشكل افتراضي ، ينشر Firebase CLI جميع الوظائف داخل index.js في نفس الوقت. إذا كان المشروع يحتوي على أكثر من 5 وظائف، فإننا ننصح استخدام --only العلم مع أسماء ظيفة محددة لنشر فقط المهام التي قمت تحريرها. يؤدي نشر وظائف محددة بهذه الطريقة إلى تسريع عملية النشر ويساعدك على تجنب الوقوع في حصص النشر. على سبيل المثال:

$ firebase deploy --only functions:addMessage,functions:makeUppercase

عند نشر عدد كبير من الوظائف ، قد تتجاوز الحصة القياسية وتتلقى رسائل خطأ HTTP 429 أو 500. لحل هذه المشكلة ، انشر الوظائف في مجموعات من 10 أو أقل.

راجع مرجع Firebase CLI للحصول على قائمة كاملة بالأوامر المتاحة.

بشكل افتراضي ، يبحث Firebase CLI في functions/ المجلد عن شفرة المصدر. يمكنك تحديد مجلد آخر عن طريق إضافة الأسطر التالية في firebase.json :

"functions": {
  "source": "another-folder"
}

حذف الوظائف

يمكنك حذف الوظائف التي تم نشرها مسبقًا بهذه الطرق:

  • صراحةً في Firebase CLI مع functions:delete
  • صراحة باستخدام قائمة السياق في قائمة الوظائف في وحدة تحكم Firebase
  • ضمنيًا عن طريق إزالة الوظيفة من index.js قبل النشر.

تطالبك جميع عمليات الحذف بالتأكيد قبل إزالة الوظيفة من الإنتاج.

يدعم حذف الوظيفة الصريح في Firebase CLI وسيطات متعددة بالإضافة إلى مجموعات الوظائف ، ويسمح لك بتحديد وظيفة تعمل في منطقة معينة. أيضًا ، يمكنك تجاوز مطالبة التأكيد.

# 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 index.js parses index.js ويزيل من الإنتاج أي وظائف تمت إزالتها من الملف.

تعديل اسم الوظيفة أو المنطقة أو المشغل

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

إعادة تسمية دالة

لإعادة تسمية دالة ، قم بإنشاء إصدار جديد تمت إعادة تسميته من الوظيفة في index.js ثم قم بتشغيل index.js نشر منفصلين. يقوم الأمر الأول بنشر الوظيفة المسماة حديثًا ، بينما يقوم الأمر الثاني بإزالة الإصدار الذي تم نشره مسبقًا. على سبيل المثال ، إذا كانت لديك وظيفة تسمى webhook ترغب في تغييرها إلى webhookNew ، webhookNew الكود كما يلي:

// before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

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

تغيير منطقة الوظيفة أو المناطق

إذا كنت تقوم بتغيير المناطق المحددة لوظيفة تتعامل مع حركة مرور الإنتاج ، فيمكنك منع فقدان الحدث من خلال تنفيذ هذه الخطوات بالترتيب:

  1. أعد تسمية الوظيفة ، وقم بتغيير منطقتها أو مناطقها حسب الرغبة.
  2. انشر الوظيفة التي تمت إعادة تسميتها ، والتي تؤدي إلى تشغيل نفس الرمز مؤقتًا في كلتا مجموعتي المناطق.
  3. حذف الوظيفة السابقة.

على سبيل المثال ، إذا كانت لديك وظيفة تسمى webhook حاليًا في منطقة الوظائف الافتراضية من us-central1 ، وتريد ترحيلها إلى asia-northeast1 ، فأنت بحاجة أولاً إلى تعديل كود المصدر لإعادة تسمية الوظيفة ومراجعة المنطقة .

// before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

ثم انشر عن طريق تشغيل:

$ firebase deploy --only functions:webhookAsia

الآن هناك وظيفتان متطابقتان قيد التشغيل: webhook يعمل في us-central1 webhookAsia ، و webhookAsia يعمل في asia-northeast1 .

بعد ذلك ، احذف webhook :

$ firebase functions:delete webhook

الآن هناك وظيفة واحدة فقط - webhookAsia ، والتي تعمل في asia-northeast1 .

تغيير نوع مشغل الوظيفة

أثناء قيامك بتطوير وظائف السحابة لنشر Firebase بمرور الوقت ، قد تحتاج إلى تغيير نوع مشغل الوظيفة لأسباب مختلفة. على سبيل المثال ، قد ترغب في:

لا يمكن تغيير نوع حدث الوظيفة بمجرد تغيير رمز المصدر وتشغيل firebase deploy . لتجنب الأخطاء ، قم بتغيير نوع مشغل الوظيفة من خلال هذا الإجراء:

  1. قم بتعديل شفرة المصدر لتضمين وظيفة جديدة بنوع المشغل المطلوب.
  2. انشر الوظيفة ، مما يؤدي إلى تشغيل كل من الوظائف القديمة والجديدة مؤقتًا.
  3. احذف الوظيفة القديمة صراحةً من الإنتاج باستخدام Firebase CLI.

على سبيل المثال ، إذا كان لديك كائن دالة تم objectChanged له نوع حدث onChange القديم ، وتريد تغييره إلى onFinalize ، onFinalize تسمية الوظيفة أولاً وقم بتحريرها للحصول على نوع حدث onFinalize .

// before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

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

اضبط خيارات وقت التشغيل

تتيح لك وظائف السحابة لـ Firebase تحديد خيارات وقت التشغيل مثل إصدار وقت تشغيل Node.js ومهلة كل وظيفة وتخصيص الذاكرة.

قم بتعيين إصدار Node.js

يسمح Firebase SDK للوظائف السحابية 2.0.0 والإصدارات الأحدث بمجموعة مختارة من وقت تشغيل Node.js. يمكنك اختيار تشغيل جميع الوظائف في مشروع حصريًا في بيئة وقت التشغيل المقابلة لأحد إصدارات Node.js المدعومة:

  • Node.js 14 (تجريبي)
  • Node.js 12
  • Node.js 10
  • Node.js 8 (تم إيقافه في 8 يونيو 2020) تم تعطيل نشر الوظائف في وقت تشغيل Node.js 8 في Firebase CLI في 15 ديسمبر 2020. سيتوقف تنفيذ الوظائف التي تم نشرها بالفعل في وقت ما في المستقبل ؛ إذا قمت بنشر وظائف في وقت تشغيل Node.js 8 ، نوصيك بالترقية إلى وقت تشغيل Node.js 12 .

لتعيين إصدار Node.js:

عيّن الإصدار في حقل engines في ملف package.json الذي تم إنشاؤه في functions/ الدليل أثناء التهيئة. على سبيل المثال ، لاستخدام الإصدار 12 فقط ، قم بتحرير هذا السطر في package.json :

  "engines": {"node": "12"}

مجال engines مطلوب ؛ يجب تحديد أحد إصدارات Node.js المدعومة حتى تتمكن من نشر الوظائف وتشغيلها. تعيِّن firebase init functions هذا الحقل على 12 .

قم بترقية وقت تشغيل Node.js الخاص بك

لترقية وقت تشغيل Node.js الخاص بك:

  1. تأكد من أن مشروعك على خطة تسعير Blaze .
  2. تأكد من أنك تستخدم Firebase CLI v8.6.0 أو أحدث.
  3. قم بتغيير قيمة engines في ملف package.json الذي تم إنشاؤه في مجلد functions/ الدليل أثناء التهيئة. على سبيل المثال ، إذا كنت تقوم بالترقية من الإصدار 10 إلى الإصدار 12 ، فيجب أن يبدو الإدخال كما يلي: "engines": {"node": "12"}
  4. اختياريًا ، اختبر تغييراتك باستخدام Firebase Local Emulator Suite .
  5. أعد نشر الوظائف باستخدام Firebase CLI v8.1.0 أو إصدار أحدث.

تعيين المهلة وتخصيص الذاكرة

في بعض الحالات ، قد يكون لوظائفك متطلبات خاصة لقيمة مهلة طويلة أو تخصيص كبير للذاكرة. يمكنك تعيين هذه القيم إما في Google Cloud Console أو في كود مصدر الوظيفة (Firebase فقط).

لتعيين تخصيص الذاكرة runWith في التعليمات البرمجية المصدر للوظائف ، استخدم المعلمة runWith المقدمة في runWith SDK للوظائف السحابية 2.0.0. يقبل خيار وقت التشغيل هذا كائن JSON المطابق لواجهة RuntimeOptions ، التي تحدد قيم timeoutSeconds memory . على سبيل المثال ، تستخدم وظيفة التخزين هذه ذاكرة بسعة 1 جيجابايت وتنتهي المهلة بعد 300 ثانية:

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

الحد الأقصى لقيمة timeoutSeconds هو 540 ، أو 9 دقائق. القيم الصالحة memory هي:

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB
  • 4GB

لتعيين تخصيص الذاكرة والمهلة في Google Cloud Console:

  1. في Google Cloud Console ، حدد Cloud Functions من القائمة اليسرى.
  2. حدد وظيفة من خلال النقر على اسمها في قائمة الوظائف.
  3. انقر فوق أيقونة تحرير في القائمة العلوية.
  4. حدد تخصيصًا للذاكرة من القائمة المنسدلة بعنوان الذاكرة المخصصة .
  5. انقر فوق المزيد لعرض الخيارات المتقدمة ، وأدخل عدد الثواني في مربع نص المهلة .
  6. انقر فوق حفظ لتحديث الوظيفة.