توضح هذه الصفحة كيفية جدولة عمليات تصدير بيانات Cloud Firestore. لتنفيذ عمليات التصدير وفقًا لجدول زمني، ننصحك باستخدام دوال السحابة وCloud Scheduler.
قبل البدء
قبل جدولة عمليات تصدير البيانات المُدارة، عليك إكمال المهام التالية:
- تفعيل الفوترة لمشروعك على Google Cloud Google Cloud فقط المشاريع التي تم تفعيل الفوترة لها يمكنها استخدام ميزة التصدير والاستيراد.
- تتطلّب عمليات التصدير حزمة وجهة على Cloud Storage. إنشاء حزمة Cloud Storage في موقع جغرافي قريب في Cloud Firestore موقع قاعدة البيانات. لا يمكنك استخدام حزمة "يدفع الطالب" للتصدير operations.
إنشاء دالة Cloud ومهمة Cloud Scheduler
اتبع الخطوات أدناه لإنشاء دالة السحابة الإلكترونية Node.js التي تبدأ عملية تصدير بيانات Cloud Firestore ومهمة Cloud Scheduler لاستدعاء هذه الدالة:
Firebase CLI
-
ثبِّت واجهة سطر الأوامر في Firebase. في دليل جديد، ابدأ في تهيئة واجهة سطر الأوامر وظائف السحابة الإلكترونية:
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 أو تنسيق يونكس كرون (* * * * *
). -
تعديل
collectionIds: []
لتصدير ما هو محدّد فقط مجموعات أخرى. يمكنك تركها كما هي لتصدير جميع المجموعات.
- استبدِل
-
نشر الدالة المُجدوَلة:
firebase deploy --only functions
وحدة تحكُّم Google Cloud Platform
إنشاء دالة سحابية
-
انتقِل إلى صفحة دوال Cloud في وحدة تحكُّم Google Cloud Platform:
- انقر على إنشاء دالة.
- أدخِل اسم دالة مثل
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:
-
انتقِل إلى صفحة أداة جدولة في السحابة الإلكترونية في وحدة تحكُّم Google Cloud Platform:
- انقر على إنشاء مهمة.
- أدخِل اسمًا للوظيفة، مثل "
scheduledFirestoreExport
". - أدخِل معدّل تكرار، مثل
every 24 hours
. - اختَر منطقة زمنية.
- ضمن الاستهداف، اختَر نشر/اشتراك. في الحقل الموضوع،
أدخل اسم موضوع الناشر/الفرع الذي حددته بجانب
دالة السحابة الإلكترونية،
initiateFirestoreExport
في المثال أعلاه. - في الحقل حمولة، أدخِل
start export
. تتطلب المهمة تحديد حمولة، ولكن دالة السحابة المذكورة أعلاه لا أستخدم هذا في الواقع - انقر على إنشاء.
ضبط أذونات الوصول
بعد ذلك، امنح دالة Cloud إذن بدء التصدير العمليات والكتابة إلى حزمة GCS.
تستخدم هذه الدالة السحابية حساب الخدمة التلقائي لمشروعك من أجل عمليات التصدير والمصادقة عليها. عند إنشاء مشروع، يتم إنشاء حساب الخدمة التلقائي لك بالاسم التالي:
PROJECT_ID@appspot.gserviceaccount.com
يتطلب حساب الخدمة هذا إذنًا لبدء عملية تصدير التشغيل والكتابة في حزمة Cloud Storage. لمنح هذه الأذونات، عليك إسناد أدوار إدارة الهوية وإمكانية الوصول التالية إلى حساب الخدمة التلقائي:
Cloud Datastore Import Export Admin
-
الدور
Owner
أوStorage Admin
في الحزمة
يمكنك استخدام سطرَي الأوامر gcloud
وgsutil
.
والأدوات المختلفة لتعيين هذه الأدوار.
إذا لم يسبق لك تثبيت هذه التطبيقات، يمكنك الوصول إليها
أدوات من Cloud Shell في وحدة تحكُّم Google Cloud Platform:
بدء Cloud Shell
-
يمكنك منح دور مشرف تصدير استيراد البيانات في السحابة الإلكترونية. استبدال 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 Platform.
انتقِل إلى صفحة أداة جدولة في السحابة الإلكترونية في وحدة تحكُّم Google Cloud Platform.
الانتقال إلى Cloud Schedulerفي صفّ المهمة الجديدة في Cloud Scheduler، انقر على التشغيل الآن.
بعد بضع ثوانٍ، من المفترض أن يتم تعديل النتيجة من خلال مهمة Cloud Scheduler إلى ناجح وآخر تشغيل إلى الوقت الحالي. قد تحتاج إلى للنقر على إعادة التحميل.
تؤكد صفحة Cloud Scheduler فقط أن الوظيفة التي تسمى وظيفة السحابة الإلكترونية. افتح صفحة "الدالة السحابية" للاطّلاع على سجلات الدالة.
عرض سجلات Cloud Function
لمعرفة ما إذا كانت دالة Cloud قد بدأت عملية تصدير بنجاح أم لا، فتح سجلات الدالة:
وحدة تحكُّم Firebase
انتقِل إلى صفحة وظائف السحابة الإلكترونية في وحدة تحكُّم Firebase.
وحدة تحكُّم Google Cloud Platform
انتقِل إلى صفحة وظائف السحابة الإلكترونية في وحدة تحكُّم Google Cloud Platform.
عرض مستوى تقدّم عملية التصدير
يمكنك استخدام الأمر gcloud firestore operations list
لعرض
مدى تقدم عمليات التصدير لديك، فراجع
إدارة عمليات التصدير والاستيراد
بعد اكتمال عملية التصدير، يمكنك عرض ملفات الإخراج في حزمة Cloud Storage: