توضّح هذه الصفحة كيفية جدولة عمليات تصدير بيانات Cloud Firestore. لتنفيذ عمليات التصدير وفقًا لجدول زمني، ننصحك باستخدام Cloud Functions وCloud Scheduler.
قبل البدء
قبل جدولة عمليات تصدير البيانات المُدارة، يجب إكمال المهام التالية:
- فعِّل الفوترة لمشروعك Google Cloud. يمكن فقط للمشاريع التي تم تفعيل الفوترة فيها استخدام ميزة التصدير والاستيراد.Google Cloud
- تتطلّب عمليات التصدير توفّر حزمة Cloud Storage وجهة. أنشئ Cloud Storage حزمة في موقع جغرافي قريب من الموقع الجغرافي لقاعدة بياناتكCloud Firestore. لا يمكنك استخدام حزمة Requester Pays لتنفيذ عمليات التصدير.
إنشاء دالة Cloud Function ومهمة Cloud Scheduler
اتّبِع الخطوات التالية لإنشاء دالة Node.js Cloud Function تبدأ عملية تصدير بيانات 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
لضبط جدول التصدير. استخدِم إما بنية AppEngine cron.yaml أو تنسيق unix-cron (* * * * *
). -
عدِّل
collectionIds: []
لتصدير مجموعات قوائم التسوق المحدّدة فقط. اتركها كما هي لتصدير جميع المجموعات.
- استبدِل
-
انشر الدالة المجدوَلة:
firebase deploy --only functions
Google Cloud Console
إنشاء دالة Cloud
-
انتقِل إلى صفحة Cloud Functions في Google Cloud Console:
- انقر على إنشاء دالة (Create Function).
- أدخِل اسم دالة، مثل
firestoreExport
- ضمن المشغّل، اختَر 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( 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 Function.
إنشاء مهمة Cloud Scheduler
بعد ذلك، أنشئ مهمة Cloud Scheduler تستدعي دالة Cloud:
-
انتقِل إلى صفحة Cloud Scheduler في وحدة تحكّم Google Cloud:
- انقر على إنشاء مهمة.
- أدخِل اسمًا للمهمة، مثل
scheduledFirestoreExport
. - أدخِل معدّل تكرار، على سبيل المثال،
every 24 hours
. - اختَر منطقة زمنية.
- ضمن الهدف، اختَر Pub/Sub. في حقل الموضوع، أدخِل اسم موضوع النشر والاشتراك الذي حدّدته بجانب دالة Cloud، وهو
initiateFirestoreExport
في المثال أعلاه. - في حقل الحِزمة، أدخِل
start export
. تتطلّب المهمة تحديد حمولة، ولكن لا تستخدم Cloud Function أعلاه هذه القيمة فعليًا. - انقر على إنشاء.
ضبط أذونات الوصول
بعد ذلك، امنح 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: