توضّح هذه الصفحة كيفية جدولة عمليات تصدير بيانات Cloud Firestore. لتنفيذ عمليات التصدير وفقًا لجدول زمني، ننصحك باستخدام Cloud Functions وCloud Scheduler.
قبل البدء
قبل جدولة عمليات تصدير البيانات المُدارة، عليك إكمال المهام التالية:
- فعِّل الفوترة لمشروعك على Google Cloud. لا يمكن استخدام ميزة التصدير والاستيراد إلا في Google Cloud المشاريع التي تم تفعيل الفوترة فيها.
- تتطلب عمليات التصدير حزمة Cloud Storage وجهة. أنشِئ حزمة Cloud Storage في موقع جغرافي بالقرب من الموقع الجغرافي لقاعدة بيانات Cloud Firestore. لا يمكنك استخدام حزمة "يدفع المرسِل" لإجراء عمليات التصدير .
إنشاء دالة Cloud ومهمة 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
باسم الحزمة. - عدِّل
every 24 hours
لتحديد جدول التصدير. استخدِم إما بنية cron.yaml في AppEngine أو تنسيق unix-cron (* * * * *
). -
عدِّل
collectionIds: []
لتصدير مجموعات المجموعات المحدّدة فقط. اترك الخيار كما هو لتصدير جميع المجموعات.
- استبدِل
-
يمكنك نشر الدالة المُجدوَلة باتّباع الخطوات التالية:
firebase deploy --only functions
Google Cloud Console
إنشاء دالة Cloud
-
انتقِل إلى صفحة Cloud Functions في وحدة تحكّم Google Cloud:
- انقر على إنشاء دالة.
- أدخِل اسم دالة مثل
firestoreExport
. - ضمن العامل المشغِّل، اختَر Cloud 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( process.env.GCP_PROJECT, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or define a list of collection 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. في الحقل الموضوع،
أدخِل اسم الموضوع الفرعي الذي حددته إلى جانب
دالّة السحابة الإلكترونية،
initiateFirestoreExport
في المثال أعلاه. - في حقل Payload (الحمولة)، أدخِل
start export
. تتطلّب الوظيفة تحديد حمولة، ولكن دالة Cloud Function أعلاه لا تستخدم هذه القيمة في الواقع. - انقر على إنشاء.
ضبط أذونات الوصول
بعد ذلك، امنح Cloud Function الإذن ببدء عمليات التصدير والكتابة في حزمة GCS.
تستخدم هذه الدالة السحابية حساب الخدمة التلقائي لمشروعك لمصادقة عمليات التصدير والموافقة عليها. عند إنشاء مشروع، يتم إنشاء حساب خدمة تلقائي لك بالاسم التالي:
PROJECT_ID@appspot.gserviceaccount.com
يتطلّب حساب الخدمة هذا إذنًا لبدء عملية تصدير والكتابة في حزمة Cloud Storage. لمنح هذه الأذونات، يجب تعيين أدوار إدارة الهوية وإمكانية الوصول التالية لحساب الخدمة التلقائي:
Cloud Datastore Import Export Admin
-
الدور
Owner
أوStorage Admin
في الحزمة
يمكنك استخدام أداتَي سطر الأوامر gcloud
وgsutil
لمنح هذين الدورَين.
إذا لم يكن قد سبق لك تثبيت هذه الأدوات، يمكنك الوصول إلى هذه الأدوات من خلال Cloud Shell في Google Cloud Console:
بدء Cloud Shell
-
اسنِد دور مشرف استيراد وتصدير "تخزين البيانات في Google Cloud". استبدِل 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 Function
يمكنك اختبار مهمة Cloud Scheduler من خلال صفحة Cloud Scheduler على Google Cloud Console.
انتقِل إلى صفحة Cloud Scheduler في وحدة تحكّم Google Cloud.
الانتقال إلى Cloud Schedulerفي صفّ وظيفة Cloud Scheduler الجديدة، انقر على التشغيل الآن.
بعد بضع ثوانٍ، من المفترض أن تعدّل وظيفة Cloud Scheduler عمود نتيجة إلى نجاح وآخر عملية تشغيل إلى الوقت الحالي. قد تحتاج إلى النقر على إعادة التحميل.
لا تؤكّد صفحة Cloud Scheduler سوى أنّ المهمة قد نادَت وظيفة Cloud. افتح صفحة Cloud Function للاطّلاع على سجلّات الدالة.
عرض سجلّات وظائف السحابة الإلكترونية
لمعرفة ما إذا كانت دالة Cloud قد بدأت عملية تصدير بنجاح، افتح سجلات الدالة:
وحدة تحكُّم Firebase
انتقِل إلى صفحة Cloud Functions في وحدة تحكُّم Firebase.
وحدة تحكُّم Google Cloud Platform
انتقِل إلى صفحة Cloud Functions في وحدة تحكّم Google Cloud.
عرض مستوى تقدّم عملية التصدير
يمكنك استخدام الأمر gcloud firestore operations list
لمعرفة مستوى تقدُّم عمليات التصدير والاطّلاع على إدارة عمليات التصدير والاستيراد.
بعد اكتمال عملية التصدير، يمكنك الاطّلاع على ملفات المخرجات في حزمة Cloud Storage: