نقل بيانات إضافات Firebase إلى حزمة وظائف تم إنشاؤها ذاتيًا

اختيار مسار نقل البيانات: الانتقال إلى حِزم الدوال على npm الانتقال إلى حزمة دوال تم إنشاؤها ذاتيًا

إذا لم ينشئ الناشر حزمة بديلة رسمية يتم توزيعها على npm، سيرشدك هذا الدليل خلال خطوات إنشاء نسخة من الإضافة وإعدادها كحزمة دوال محلية.

التحقّق من القيود المعروفة لعملية نقل البيانات

قبل البدء في نقل بيانات نسخة من الإضافة، تحقَّق مما إذا كان الإعداد يستخدم أيًا من الميزات التالية التي تتطلب حلاً بديلاً أو غير متاحة بعد في حِزم الدوال:

  • تتطلّب مستودعات Docker المخصّصة ومفاتيح KMS حلاً يدويًا Cloud Functions for Firebase لا يتيح استخدام مَعلمات النظام البديلة لضبط مستودع Docker مخصّص أو مفتاح تشفير يديره العميل (مفتاح KMS). إذا كانت الإضافة تضبط أيًا من هاتين المَعلمتين، يُرجى الرجوع إلى الحل البديل في الأسئلة الشائعة.

قبل البدء

يجب إعداد واجهة سطر أوامر Firebase وبدء مشروع Firebase. عند استخدام واجهة سطر الأوامر، تأكَّد من استخدام الإصدار >= 15.32.0 من firebase-tools الذي يتضمّن أوامر نقل البيانات الجديدة ومجموعة الدوال.

أذونات وأدوار الحساب المطلوبة

استنادًا إلى ما يجب إنشاؤه وضبطه من خلال واجهة سطر الأوامر في Firebase أثناء عملية النقل، يجب أن يتضمّن الحساب المستخدَم للمصادقة مع Firebase وGoogle Cloud الأدوار التالية:

  • roles/firebaseextensions.editor
  • roles/cloudbuild.builds.editor
  • roles/artifactregistry.writer
  • roles/run.developer
  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountCreator
  • roles/cloudfunctions.admin (إذا كنت بحاجة إلى تنفيذ setIamPermissions لنقاط النهاية العامة)
  • ‫roles/secretmanager.admin (في حال استخدام مفاتيح سرية)
  • roles/serviceusage.serviceUsageAdmin (إذا كنت بحاجة إلى تفعيل واجهات برمجة تطبيقات جديدة)

ننصحك باستخدام حساب سبق أن ثبّت إضافات ونشر دوال، لأنّ معظم هذه الأذونات ستكون قد مُنحت له. إذا كان حساب نقل البيانات يحتاج إلى المزيد من الأدوار، اتّبِع تعليمات إدارة الهوية وإمكانية الوصول في Google Cloud لإضافتها.

ترقية نسخة الإضافة إلى أحدث إصدار

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

استخدِم أحد الخيارات التالية لتحديث الإضافة، حسب مكان تثبيتها:

  • من وحدة تحكّم Firebase
  • من واجهة سطر الأوامر (CLI) في Firebase باستخدام:
    • firebase ext:update <extension-instance-id> --project <project-id> firebase deploy --only extensions --project <project-id>

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

تفرُّع الإضافة إلى حزمة دوال محلية

قبل البدء في تحويل إضافة إلى حزمة دوال محلية، تأكَّد من أنّ الرمز المصدر للإضافة موجود داخل مشروع Firebase. لإجراء ذلك، استنسِخ مستودع الإضافة من GitHub، وأنشئ دليلاً داخل جذر مشروع Firebase، وانسخ مجلد functions/ الخاص بالإضافة وextension.yaml إليه:

mkdir -p path/to/kit
cp -r /path/to/extension-source/functions/* path/to/kit/
cp /path/to/extension-source/extension.yaml path/to/kit/.

اتّبِع الخطوات من 1 إلى 8 في دليل نقل بيانات الناشر لنقل الرمز المصدر للإضافة إلى دالة من الجيل الثاني. ثم تابع الخطوات التالية.

تعديل الحزمة المحلية لتتيح استخدام منطقة الدالة المصدَّرة والمَعلمات المتقدّمة

في حزمة الدوالّ المحلية، لا تنشئ واجهة سطر الأوامر (CLI) في Firebase ملف index.ts لإعداد الحزمة وضبطها لاستخدام مَعلمات النظام التي تم نقلها. لاستخدام منطقة الدالة والمَعلمات المتقدّمة التي تم ضبطها للإضافة، عليك إعداد ملف index.ts لقراءة التنسيق الذي تم تصديره من خلال firebase ext:export --mode functions في ملف متغيّر بيئة.

على وجه التحديد، في ملف index.ts ذي المستوى الأعلى الذي يصدّر الدوال، حدِّد مَعلمة لـ FUNCTION_DEFAULT_REGION واستدعِ setGlobalOptions باستخدام متغيّرات البيئة في النموذج EXT_MIGRATED_SYSTEM_<GLOBAL_OPTION>، على غرار نموذج index-kit-migration.ts الذي تستخدمه واجهة سطر الأوامر:

import { setGlobalOptions } from "firebase-functions";
import { MemoryOption, VpcEgressSetting, IngressSetting } from "firebase-functions/v2/options";
import { defineString } from "firebase-functions/params";

export const regionParam = defineString("FUNCTION_DEFAULT_REGION", {
  input: { text: { nonEmpty: true } },
  description: "Global default region where functions should be deployed. Can be overridden per-function.",
});

setGlobalOptions({
  region: regionParam,
  memory: (process.env.EXT_MIGRATED_SYSTEM_MEMORY as MemoryOption) ?? undefined,
  timeoutSeconds: process.env.EXT_MIGRATED_SYSTEM_TIMEOUTSECONDS
    ? Number(process.env.EXT_MIGRATED_SYSTEM_TIMEOUTSECONDS)
    : undefined,
  vpcConnectorEgressSettings:
    process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS &&
    process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS !== "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"
      ? (process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS as VpcEgressSetting)
      : undefined,
  vpcConnector: process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOR ?? undefined,
  maxInstances: process.env.EXT_MIGRATED_SYSTEM_MAXINSTANCES
    ? Number(process.env.EXT_MIGRATED_SYSTEM_MAXINSTANCES)
    : undefined,
  minInstances: process.env.EXT_MIGRATED_SYSTEM_MININSTANCES
    ? Number(process.env.EXT_MIGRATED_SYSTEM_MININSTANCES)
    : undefined,
  ingressSettings: (process.env.EXT_MIGRATED_SYSTEM_INGRESSSETTINGS as IngressSetting) ?? undefined,
  // Parses a comma-separated string of key:value pairs into a key-value object
  // (for example, "key1:value1,key2:value2" -> { key1: "value1", key2: "value2" }).
  labels: process.env.EXT_MIGRATED_SYSTEM_LABELS
    ? process.env.EXT_MIGRATED_SYSTEM_LABELS.split(",").reduce<Record<string, string> | undefined>(
        (acc, curr) => {
          const [key, value] = curr.split(":");
          const trimmedKey = key?.trim();
          const trimmedValue = value?.trim();
          if (!trimmedKey || !trimmedValue) {
            return acc;
          }
          acc = acc ?? {};
          acc[trimmedKey] = trimmedValue;
          return acc;
        },
        undefined,
      )
    : undefined,
});

// Re-export all functions so the Firebase CLI can deploy them
export * from "./your-functions";

اختبار حزمة الأدوات قبل نقل البيانات

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

أولاً، أضِف نسختك كحزمة محلية، واضبطها، وانشرها في مشروع اختبار. يجب أن تكون حِزم الدوال المحلية داخل مشروع "Firebase"، لذا إذا كان مستودع الإضافات المستنسَخ خارج مشروع "Firebase"، يجب نقله إلى دليل المشروع. ثم قم بتشغيل أمر تثبيت المجموعة التالي لتثبيتها كمجموعة محلية:

firebase functions:kits:install --directory <path-to-your-fork> --project <test-project-id>

يوجّهك هذا الأمر خلال عملية اختيار معرّف حزمة ومعرّف نسخة وإعدادات لأول نسخة اختبارية. بعد ذلك، يتم تعديل ملف firebase.json لتسجيل حزمة محلية تشير إلى الدليل المتفرّع، مع إعدادات لكل مثيل مخزَّن في ملف .env في function-kits/<kit-id>/config-<instance-id>.

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

firebase deploy --only functions:<kit-instance-id> --project <test-project-id>

مثال عملي: بث Cloud Firestore إلى BigQuery (firestore-bigquery-export)

التحقّق من مزامنة Cloud Firestore مع BigQuery بشكل تام بين الأطراف:

  1. في صفحة Cloud Firestore ضمن وحدة تحكّم Firebase، أنشئ المجموعة التي حدّدتها على أنّها COLLECTION_PATH (users) إذا لم تكن موجودة من قبل.
  2. أنشئ مستندًا باسم bigquery-mirror-test يحتوي على أي حقول بأي قيم.
  3. في صفحة BigQuery ضمن وحدة تحكّم Google Cloud، يمكنك الاستعلام عن جدول سجلّ التغييرات الأوّلي. يجب أن يحتوي على صف واحد يسجل إنشاء المستند:

    SELECT * FROM `PROJECT_ID.analytics.users_raw_changelog`
    
  4. يمكنك الاستعلام عن أحدث طريقة عرض، والتي من المفترض أن تعرض أحدث حدث تغيير للمستند الوحيد الحالي (bigquery-mirror-test):

    SELECT * FROM `PROJECT_ID.analytics.users_raw_latest`
    
  5. حذف مستند "bigquery-mirror-test" في "Cloud Firestore" ويختفي من طريقة العرض الأخيرة، ويتم إلحاق حدث DELETE بجدول سجلّ التغييرات الأوّلي.

    يمكنك فحص السجلّ الكامل لمستند واحد باستخدام:

    SELECT *
       FROM `PROJECT_ID.analytics.users_raw_changelog`
       WHERE document_name = "bigquery-mirror-test"
       ORDER BY timestamp ASC
    

الاختلافات عن اختبار الإضافة:

  • يتم نشر المشغّل على أنّه kit-<kit-instance-id>-fsexportbigquery وليس ext-<instanceId>-fsexportbigquery. ابحث عن هذا الاسم في لوحة بيانات Cloud Functions وسجلّاتها.
  • يتم تشغيل الرمز في Firebase Local Emulator Suite كدوال عادية. يمكنك ضبط قيم المَعلمات لاستخدامها في المحاكي باستخدام .env.local. يمكنك أيضًا إجراء اختبار وحدة للرمز البرمجي باستخدام حزمة تطوير البرامج (SDK) لـ firebase-functions-test كما هو موضّح في اختبار وحدة Cloud Functions.
  • لم يعُد توفير الموارد يعتمد على وقت تشغيل الإضافات. إذا لم يظهر جدول سجلّ التغييرات بعد النشر، يُرجى إعادة تشغيل مهمة الإعداد يدويًا: firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>. تكون المهمة متكررة، لذا فإن إعادة تشغيلها تؤدي إلى تسوية مجموعة البيانات والجدول وطرق العرض.
  • تأتي قيم المَعلمات من .env بدلاً من نموذج التثبيت، لذا فإنّ عمليات إعادة تشغيل firebase deploy تكون غير تفاعلية بعد اكتمال .env.

(اختياري) تنظيف البيانات الناتجة عن الاختبار

إذا أردت إزالة هذه النسخة الاختبارية بعد الاختبار، يمكنك إلغاء تثبيتها:

firebase functions:kits:uninstall --instance <kit-instance-id> --project <test-project-id>

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

Migrate from extensions to your local kit

بعد اختبار الحزمة المحلية، يمكنك نقل مثيل الإضافة المنشور مباشرةً.

1. تثبيت مثيل مجموعة الوظائف البديلة

ثبِّت حزمة الدوال المحلية، مع تمرير --no-configure لتخطّي الإعداد اليدوي حتى تتمكّن الخطوة التالية من تصدير إعدادات الإضافة الحالية مباشرةً إلى مثيل الحزمة هذا:

firebase functions:kits:install --no-configure --directory <path-to-your-fork> --project <project-id>

2. ضبط مثيل حزمة الدوال بشكل مماثل للإضافة

يجب تخصيص نسخة الحزمة هذه بإعدادات مطابقة لإعدادات الإضافة التي يتم استبدالها. يمكنك تصدير إعدادات مثيل الإضافة إلى ملف .env، والذي يخزّن بيانات إعدادات المَعلمات ومتغيّرات البيئة والمراجع السرية لجميع Cloud Functions، بما في ذلك المجموعات. لتصديرها مباشرةً إلى ملف الإعداد الخاص بمجموعة الأدوات، شغِّل:

firebase ext:export --mode functions --instance <extension-instance-id> --kit-instance <kit-instance-id> --project <project-id>

في نهاية هذه الخطوة، يتم تخزين معلومات الإعدادات لهذا المثيل في ملف .env خاص بالمشروع في دليل إعدادات المثيل، مثل: function-kits/<kit-name>/config-<instance-id>/.env.<project-id>

3- نشر مجموعة الاستبدال والتحقّق منها

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

إذا كانت حزمتك تستخدم أي مَعلمات جديدة لم تكن متوفّرة في مثيل الإضافة الذي نقلت منه، ستطلب منك واجهة سطر الأوامر في Firebase إدخالها في بداية عملية النشر. هذا ليس متوقعًا في هذا المثال العملي من إضافة firestore-bigquery-export محدّثة، ولكن العديد من المجموعات تطلب مَعلمة جديدة لأي مصدر مشغّل حدث تستخدمه المجموعة. في إطار عملية النقل هذه، تستخدم الحِزم المحدَّثة دوال الجيل الثاني، بينما كانت الإضافات تستخدم سابقًا دوال الجيل الأول. في الجيل الثاني، تقع الدوال بالقرب من مصادر الأحداث وتتم إضافتها كمَعلمة إضافية. في التحديثات المستقبلية، إذا تمت إضافة معلمات جديدة، فستطالبك واجهة سطر الأوامر (CLI) في عملية النشر التالية.

مثال عملي:

firebase deploy --only functions:firestore-bigquery-export --project my-project

الناتج:

=== Deploying to 'my-project'...
i  deploying functions
i  functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project
i  functions: ensuring required API bigquery.googleapis.com is enabled...
i  functions: ensuring required API cloudtasks.googleapis.com is enabled...
✔  functions: required APIs are enabled
i  functions: granting declarative IAM roles to managed service account:
   - BigQuery Data Editor
   - BigQuery User
   - Cloud Datastore User
   - Eventarc Event Receiver
   - roles/run.invoker
✔  functions: successfully granted IAM roles
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-fsexportbigquery(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-initBigQuerySync(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-setupBigQuerySync(us-central1)...
✔  functions[kit-firestore-bigquery-export-fsexportbigquery(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-initBigQuerySync(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-setupBigQuerySync(us-central1)] Successful create operation.
i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/us-central1/queues/kit-firestore-bigquery-export-initBigQuerySync.
✔  Deploy complete!

للتأكّد من عدم حدوث أي أخطاء في firebase deploy الحزمة، يُرجى مراجعة سجلّات النشر لمعرفة ما إذا تم تفعيل أيّ من عناصر الربط في مراحل النشاط. تستخدم الإضافات الشائعة، مثل Stream Cloud Firestore to BigQuery، دوال ربط مراحل النشاط. في ما يلي مثال على شكل موضع إدراج مراحل النشاط عند تشغيله:

i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i  functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project

تؤكّد هذه الرسائل المسجّلة ما يلي:

  • تم العثور على موضع إدراج مراحل النشاط وتنفيذه.
  • تمت إضافة مهمة إلى قائمة انتظار المهام المرتبطة بحدث مراحل النشاط.
  • تم توفير رابط إلى Cloud Logging لتتمكّن من التحقّق من اكتمال المهمة بدون أخطاء.

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

firebase functions:lifecycle:run <hook-name> <codebase>

إذا كنت تنشر نسخة من حزمة الدوال للمرة الأولى، شغِّل:

firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>

إذا قررت في أي وقت أثناء عملية التحقّق إيقاف عملية النقل هذه أو التراجع عنها، يمكنك إلغاء تثبيت الحزمة باتّباع التعليمات الواردة في إلغاء تثبيت الإضافة.

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

في حال عدم تغيير المعالجة وعدم ظهور نتائج مكرّرة من الإضافة والحزمة، فإنّ الخيار الأفضل هو فحص سجلّات الحزمة مباشرةً بعد تفعيل وظائف الحزمة.

مثال عملي: بث Cloud Firestore إلى BigQuery

باستخدام إضافة "بث البيانات من Cloud Firestore إلى BigQuery"، تتم الكتابة في كلّ من "جدول سجلّ التغييرات الأوّلي" (*_raw_changelog) وجدول "أحدث طريقة عرض" (*_raw_latest) مع إزالة التكرار في حال إرسال الحدث نفسه إلى الحزمة والإضافة. لذلك لا يمكنك استخدام وجود أي صفوف أو صفوف مكررة في BigQuery للتحقق من عمل المجموعة.

يمكنك الاطّلاع على سجلّات الدوال بعد فترة قصيرة من الكتابة في مجموعة Firestore باستخدام firebase functions:logs والبحث عن إدخال في السجلّ يشير إلى أنّه تمت معالجة عملية كتابة بنجاح. بالنسبة إلى هذه الحزمة التي تتضمّن رقم تعريف النسخة الافتراضية التلقائي firestore-bigquery-export، ستبدو على النحو التالي:

2026-09-25T19:52:46.328612Z I kit-firestore-bigquery-export-fsexportbigquery: Started execution of extension
2026-09-25T19:52:46.328644Z I kit-firestore-bigquery-export-fsexportbigquery: {"message":"Firestore event received by onDocumentWritten trigger","document_name":"projects/extensions-eventarc-testing/databases/(default)/documents/exported-messages/cmGP6XLyksqGdw2OgTOq","operation":0,"event_id":"9f59a2a4-1a5e-4c41-a32d-561e3c734502"}
2026-09-25T19:52:46.616064Z I kit-firestore-bigquery-export-fsexportbigquery: Completed execution of extension
2026-09-2

إذا كان لديك الكثير من السجلّات، يمكنك فلترتها للوصول إلى وظيفة معيّنة في حزمة الأدوات باستخدام الأمر التالي:

firebase functions:log --only <function name>

للعثور على أسماء الدوال المحددة لمثيل مجموعة، يمكنك استخدام الأمر التالي:

firebase functions:list | grep kit-<kit instance id>

في هذا المثال:

firebase functions:list | grep kit-firestore-bigquery-export
│ kit-firestore-bigquery-export-fsexportbigquery  │ v2      │ google.cloud.firestore.document.v1.written                    │
│ kit-firestore-bigquery-export-initBigQuerySync  │ v2      │ taskQueue                                                     │
│ kit-firestore-bigquery-export-setupBigQuerySync │ v2      │ taskQueue                                                     │
│ kit-firestore-bigquery-export-syncBigQuery      │ v2      │ taskQueue                                                     │

4. إلغاء تثبيت الإضافة

بعد التحقّق من حزمة الدوال المنشورة، يمكنك إلغاء تثبيت الإضافة لتجنُّب تكرار سلوكها مرة للحزمة ومرة للإضافة. يمكنك إلغاء تثبيت جميع الإضافات من واجهة سطر الأوامر في Firebase بغض النظر عن طريقة تثبيتها، وذلك من خلال تمرير العلامة --immediate:

firebase ext:uninstall <extension-instance-id> --project <project-id> --immediate

مثال عملي:

firebase ext:uninstall firestore-bigquery-export --project my-project --immediate

الناتج:

i  extensions: uninstalling firestore-bigquery-export...
i  extensions: deleting extension instance resources in project my-project...
✔  extensions: successfully uninstalled firestore-bigquery-export

عمليات نقل البيانات المتقدّمة

يمكنك استخدام الإضافات في مشاريع Firebase متعددة تريد إدارتها باستخدام قاعدة رموز برمجية واحدة. على سبيل المثال، إذا نشرت البنية الأساسية نفسها في بيئة testing وبيئة production، وكان لكل منهما مثيل documents Cloud Firestore يتم تصديره إلى BigQuery، قد يكون لديك مثيلان من إضافة firestore-bigquery-export مثبّتَين:

  • export-documents-testing
  • export-documents-production

إذا نقلت هذين المثيلَين من الإضافة إلى مثيلَين من حزمة الدوال في قاعدة رموز برمجية واحدة عند العمل باستخدام واجهة سطر الأوامر Firebase ونشرتهما باستخدام firebase deploy --project testing وfirebase deploy --project production، سيؤدي كل نشر إلى إنشاء مثيلَين في كل من بيئتَي testing وproduction.

بدلاً من ذلك، يمكنك استبدال نسختَي الإضافة بنسخة واحدة من حزمة الدوال firestore-bigquery-export المنشورة في مشاريع متعددة، حيث يكون لكل مشروع إعداداته الخاصة. من المفترض أن يظهر دليل الإعدادات للمثيل على النحو التالي:

  • config-export-documents/
    • .env.testing
    • .env.production

يؤدي كل نشر على testing وproduction إلى إنشاء نسخة واحدة من حزمتك بالإعدادات المقابلة. تنشئ أوامر CLI الحالية هذا الإعداد طالما أنّك تمرّر العلامة --project في كل استدعاء لـ ext:migrate أو functions:kits:install.

مثال عملي:

firebase functions:kits:install --package @firebase-function-kits/firestore-bigquery-export --project testing --no-configure --template migration
✔ What would you like to name this kit? firestore-bigquery-export
✔ What would you like to name this instance? export-documents
✔  Wrote function-kits/firestore-bigquery-export/source/package.json
✔  Wrote function-kits/firestore-bigquery-export/source/tsconfig.json
✔  Wrote function-kits/firestore-bigquery-export/source/.gitignore
✔  Wrote function-kits/firestore-bigquery-export/source/src/index.ts
i  functions: Running npm install
✔  Wrote configuration info to firebase.json
✔  functions: Function kit firestore-bigquery-export successfully installed.
# This creates the export-documents instance with an empty .env.testing file
# for the testing project. Now populate it via export:
firebase ext:export --mode functions --instance export-documents-testing \
  --kit-instance export-documents --project testing

# Repeat the export for production into the same kit instance to create
# .env.production from the export-documents-prod instance:
firebase ext:export --mode functions --instance export-documents-prod \
  --kit-instance export-documents --project production

لديك الآن نسخة واحدة من حزمة الأدوات تم إعدادها للنشر في مشروعَي testing وproduction مع الإعدادات الخاصة بكل منهما. إذا أنشأت مثيلاً في مشروع "testing" وشغّلت الأمر "functions:kits:install" للحزمة نفسها في مشروع "production"، سيظهر لك خيار إعادة استخدام المثيل الذي تم ضبطه لمشروع "testing" أو تثبيت مثيل ثانٍ.