توضّح هذه الصفحة كيفية جدولة عمليات تصدير بياناتك على Cloud Firestore. لتشغيل عمليات التصدير وفقًا لجدول زمني، نوصي باستخدام Cloud Functions وCloud Scheduler.
قبل البدء
قبل جدولة عمليات تصدير البيانات المُدارة، يجب إكمال المهام التالية:
- تفعيل الفوترة لمشروعك Google Cloud. يمكن فقط للمشاريع التي تم تفعيل الفوترة فيها استخدام ميزة التصدير والاستيراد.Google Cloud
- تتطلب عمليات التصدير دلو الوجهة Cloud Storage. أنشئ Cloud Storage حزمة في موقع جغرافي قريب من الموقع الجغرافي لقاعدة بياناتكCloud Firestore. لا يمكنك استخدام حزمة Requester Pays لعمليات التصدير.
إنشاء وظيفة سحابية ووظيفة Cloud Scheduler
اتّبِع الخطوات التالية لإنشاء دالة Cloud Function في Node.js تبدأ عملية تصدير بيانات Cloud Firestore ومهمة Cloud Scheduler لاستدعاء هذه الدالة:
Firebase CLI
-
تثبيت Firebase 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
-
انتقل إلى صفحة وظائف السحابة في وحدة تحكم Google Cloud:
- انقر على كتابة دالة.
- أدخِل اسم دالة، مثل
firestore-export - ضمن المشغل، حدد النشر/الاشتراك السحابي
- ضمن الموضوع، حدد إنشاء موضوع جديد. أدخِل اسمًا لموضوع 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 Function.
إنشاء مهمة Cloud Scheduler
بعد ذلك، أنشئ مهمة Cloud Scheduler تستدعي Cloud Function:
-
انتقِل إلى صفحة Cloud Scheduler في وحدة تحكّم Google Cloud:
- انقر على إنشاء مهمة.
- أدخِل اسمًا للمهمة، مثل
scheduledFirestoreExport. - أدخِل معدّل تكرار، على سبيل المثال،
every 24 hours. - اختَر منطقة زمنية.
- ضمن الهدف، حدد النشر/الاشتراك. في حقل الموضوع، أدخِل اسم موضوع النشر/الاشتراك الذي حدّدته بجانب دالة Cloud، وهو
initiateFirestoreExportفي المثال أعلاه. - في الحقل الحِمل، أدخِل
start export. تتطلب المهمة حمولة محددة، ولكن وظيفة السحابة المذكورة أعلاه لا تستخدم هذه القيمة فعليًا. - انقر على إنشاء.
ضبط أذونات الوصول
بعد ذلك، امنح Cloud Function الإذن ببدء عمليات التصدير والكتابة في حزمة GCS.
تستخدِم هذه الدالة السحابية حساب الخدمة التلقائي لمشروعك للمصادقة على عمليات التصدير ومنح الإذن بها. عند إنشاء مشروع، يتم إنشاء حساب خدمة تلقائي لك بالاسم التالي:
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. استبدِل 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.
انتقِل إلى صفحة Cloud Scheduler في وحدة تحكّم Google Cloud.
الانتقال إلى Cloud Schedulerفي صف وظيفة Cloud Scheduler الجديدة، انقر على تشغيل الآن.
بعد بضع ثوانٍ، من المفترض أن تعدّل مهمة Cloud Scheduler عمود النتيجة إلى نجاح وعمود آخر عملية تشغيل إلى الوقت الحالي. قد تحتاج إلى النقر على إعادة التحميل.
تؤكّد صفحة Cloud Scheduler فقط أنّ المهمة استدعت Cloud Function. افتح صفحة Cloud Function للاطّلاع على سجلّات الدالة.
عرض سجلات Cloud Functions
لمعرفة ما إذا كانت "دالة السحابة" قد بدأت عملية تصدير بنجاح، افتح سجلّات الدالة:
وحدة تحكُّم Firebase
انتقِل إلى صفحة Cloud Functions في وحدة تحكّم Firebase.
وحدة تحكّم Google Cloud Platform
انتقِل إلى صفحة Cloud Functions في وحدة تحكّم Google Cloud.
عرض مدى تقدّم عملية التصدير
يمكنك استخدام الأمر gcloud firestore operations list لعرض
تقدّم عمليات التصدير، راجِع
إدارة عمليات التصدير والاستيراد.
بعد اكتمال عملية التصدير، يمكنك عرض الملفات الناتجة في حزمة Cloud Storage: