توضّح هذه الصفحة كيفية جدولة عمليات تصدير بياناتك Cloud Firestore. لتشغيل عمليات التصدير وفقًا لجدول زمني، ننصحك باستخدام Cloud Functions وCloud Scheduler.
قبل البدء
قبل جدولة عمليات تصدير البيانات المُدارة، عليك إكمال المهام التالية:
- تفعيل الفوترة لمشروعك Google Cloud. لا يمكن استخدام ميزة التصدير والاستيراد إلا في مشاريع Google Cloud التي تم تفعيل الفوترة فيها.
- تتطلّب عمليات التصدير حزمة وجهة Cloud Storage. أنشِئ حزمةCloud Storage في موقع جغرافي قريب من Cloud Firestore موقع قاعدة بياناتك. لا يمكنك استخدام حزمة "الدفع حسب الطلب" لعمليات التصدير عمليات.
إنشاء دالة Cloud ووظيفة Cloud Scheduler
اتّبِع الخطوات التالية لإنشاء دالة Cloud في Node.js تبدأ عملية تصدير بيانات Cloud Firestore ووظيفة Cloud Scheduler لاستدعاء هذه الدالة:
Firebase CLI
-
ثبِّت Firebase CLI. في دليل جديد، ابدأ CLI لـ Cloud Functions:
firebase init functions --project PROJECT_ID
- اختَر JavaScript للغة.
- يمكنك تفعيل ESLint اختياريًا.
- أدخِل
yلتثبيت التبعيات.
-
استبدِل الرمز في الملف
functions/index.jsبالرمز التالي:const functions = require('firebase-functions'); const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME'; exports.scheduledFirestoreExport = functions.pubsub .schedule('every 24 hours') .onRun((context) => { const projectId = process.env.GCP_PROJECT; const databaseName = client.databasePath(projectId, '(default)'); return client.exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or set to a list of collection IDs to export, // collectionIds: ['users', 'posts'] collectionIds: [] }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); }) .catch(err => { console.error(err); throw new Error('Export operation failed'); }); });
-
في الرمز أعلاه، عدِّل ما يلي:
- استبدِل
BUCKET_NAMEباسم الحزمة. - استبدِل
YOUR_PROJECT_IDبرقم تعريف مشروعك . - عدِّل
every 24 hoursلضبط جدول التصدير. استخدِم إما بنية AppEngine cron.yaml أو الـ تنسيق unix-cron (* * * * *). -
عدِّل
collectionIds: []لتصدير مجموعات قوائم التسوق المحدّدة فقط. اتركها كما هي لتصدير جميع مجموعات قوائم التسوق.
- استبدِل
-
تفعيل الدالة المُجدوَلة:
firebase deploy --only functions
Google Cloud Console
إنشاء دالة Cloud
-
انتقِل إلى صفحة Cloud Functions في Google Cloud Console:
- انقر على كتابة دالة
- أدخِل اسم دالة، مثل
firestore-export - ضِمن المشغِّل، اختَر Cloud Pub/Sub
- ضِمن الموضوع ، اختَر إنشاء موضوع جديد. أدخِل اسمًا لموضوع Pub/Sub، مثل
initiateFirestoreExport. سجِّل اسم الموضوع لأنّك ستحتاج إليه لإنشاء وظيفة Cloud Scheduler. - ضمن رمز المصدر ، اختَر محرّر مضمّن. أدخِل الرمز التالي ضِمن
index.js في الرمز أعلاه، عدِّل ما يلي:const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { const databaseName = client.databasePath( YOUR_PROJECT_ID, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collection groups // or define a list of collection group IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
- استبدِل
BUCKET_NAMEباسم الحزمة. -
عدِّل
collectionIds: []لتصدير مجموعات قوائم التسوق المحدّدة فقط. اتركها كما هي لتصدير جميع مجموعات قوائم التسوق.
- استبدِل
- ضِمن
package.json، أضِف التبعية التالية:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - ضِمن الدالة المطلوب تنفيذها، أدخِل
scheduledFirestoreExport، وهو اسم الدالة فيindex.js. - انقر على إنشاء لنشر دالة Cloud.
إنشاء وظيفة Cloud Scheduler
بعد ذلك، أنشِئ وظيفة Cloud Scheduler تستدعي دالة Cloud:
-
انتقِل إلى صفحة Cloud Scheduler في Google Cloud Console:
- انقر على إنشاء وظيفة.
- أدخِل اسمًا للوظيفة، مثل
scheduledFirestoreExport. - أدخِل تكرارًا، مثلاً
every 24 hours. - اختَر منطقة زمنية.
- ضِمن الهدف ، اختَر Pub/Sub. في حقل الموضوع، أدخِل اسم موضوع Pub/Sub الذي حدّدته بجانب دالة Cloud، وهو
initiateFirestoreExportفي المثال أعلاه. - في حقل الحمولة ، أدخِل
start export. تتطلّب الوظيفة حمولة محدّدة، ولكن دالة Cloud أعلاه لا تستخدم هذه القيمة فعليًا. - انقر على إنشاء.
ضبط أذونات الوصول
بعد ذلك، امنح دالة Cloud إذنًا لبدء عمليات التصدير والكتابة في حزمة GCS.
تستخدم دالة Cloud هذه حساب الخدمة التلقائي لمشروعك للمصادقة على عمليات التصدير ومنح الإذن بها. عند إنشاء مشروع، يتم إنشاء حساب خدمة تلقائي لك بالاسم التالي:
PROJECT_ID@appspot.gserviceaccount.com
يحتاج حساب الخدمة هذا إلى إذن لبدء عملية تصدير والكتابة في حزمة Cloud Storage. لمنح هذه الأذونات، أسند أدوار IAM التالية إلى حساب الخدمة التلقائي:
Cloud Datastore Import Export Admin-
دور
OwnerأوStorage Adminفي الحزمة
يمكنك استخدام أداتَي سطر الأوامر gcloud وgsutil لإسناد هذه الأدوار.
إذا لم تكن هذه الأدوات مثبّتة، يمكنك الوصول إليها من Cloud Shell في Google Cloud Console:
بدء Cloud Shell
-
أسند دور Cloud Datastore Import Export Admin. استبدِل PROJECT_ID، وشغِّل الأمر التالي:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
أسند دور مشرف مساحة التخزين في الحزمة. استبدِل PROJECT_ID وBUCKET_NAME، وشغِّل الأمر التالي:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
إذا أوقفت حساب الخدمة التلقائي في App Engine أو حذفْته، سيفقد تطبيق App Engine إمكانية الوصول إلى قاعدة بيانات Cloud Firestore. إذا أوقفت حساب خدمة App Engine، يمكنك إعادة تفعيله، راجِع مقالة تفعيل حساب خدمة. إذا حذفت حساب خدمة App Engine خلال آخر 30 يومًا، يمكنك استعادة حساب الخدمة، راجِع مقالة إلغاء حذف حساب خدمة.
اختبار وظيفة Cloud Scheduler ودالة Cloud
يمكنك اختبار وظيفة Cloud Scheduler في صفحة Cloud Scheduler في Google Cloud Console.
انتقِل إلى صفحة Cloud Scheduler في Google Cloud Console.
الانتقال إلى Cloud Schedulerفي صف وظيفة Cloud Scheduler الجديدة، انقر على تشغيل الآن.
بعد بضع ثوانٍ، من المفترض أن تعدِّل وظيفة Cloud Scheduler عمود النتيجة إلى نجاح وآخر عملية تشغيل إلى الوقت الحالي. قد تحتاج إلى النقر على تحديث.
تؤكّد صفحة Cloud Scheduler فقط أنّ الوظيفة استدعت دالة Cloud. افتح صفحة دالة Cloud للاطّلاع على سجلّات الدالة.
عرض سجلّات دالة Cloud
لمعرفة ما إذا كانت دالة Cloud قد بدأت عملية تصدير بنجاح، افتح سجلّات الدالة:
وحدة تحكُّم Firebase
في وحدة تحكُّم Firebase، انتقِل إلى الاستضافة والخدمات بلا خادم > الدوال.
وحدة تحكم Google Cloud Platform
انتقِل إلى صفحة Cloud Functions في Google Cloud Console.
عرض مدى تقدّم عملية التصدير
يمكنك استخدام الأمر gcloud firestore operations list لعرض
مدى تقدّم عمليات التصدير، راجِع
مقالة إدارة عمليات التصدير والاستيراد.
بعد اكتمال عملية التصدير، يمكنك عرض ملفات الإخراج في حزمة Cloud Storage الخاصة بك: