جدولة عمليات تصدير البيانات

توضّح هذه الصفحة كيفية جدولة عمليات تصدير بيانات Cloud Firestore. لتنفيذ عمليات التصدير وفقًا لجدول زمني، ننصحك باستخدامCloud Functions وCloud Scheduler.

قبل البدء

قبل جدولة عمليات تصدير البيانات المُدارة، عليك إكمال المهام التالية:

  1. تفعيل الفوترة لمشروعك على "Google Cloud". لا يمكن استخدام ميزة التصدير والاستيراد إلا في Google Cloud المشاريع التي تم تفعيل الفوترة فيها.
  2. تتطلّب عمليات التصدير حزمة Cloud Storage وجهة. إنشاء حزمة Cloud Storage في موقع جغرافي بالقرب من Cloud Firestore موقع قاعدة البيانات. لا يمكنك استخدام حزمة "يدفع الطالب" للتصدير العمليات التجارية.

إنشاء دالة Cloud ومهمة Cloud Scheduler

اتبع الخطوات أدناه لإنشاء دالة السحابة الإلكترونية Node.js التي يؤدي إلى تصدير بيانات Cloud Firestore ومهمة Cloud Scheduler. لاستدعاء هذه الدالة:

Firebase CLI
  1. ثبِّت واجهة سطر الأوامر في Firebase. في دليل جديد، ابدأ في تهيئة واجهة سطر الأوامر Cloud Functions:

    firebase init functions --project PROJECT_ID
    1. اختَر JavaScript للغة.
    2. اختياريًا، يمكنك تفعيل ESLint.
    3. أدخِل y لتثبيت التبعيات.
  2. استبدِل الرمز في ملف 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');
      });
    });
  3. في الرمز البرمجي أعلاه، عدِّل ما يلي:
    • استبدِل BUCKET_NAME باسم حزمة التخزين.
    • يُرجى تعديل "every 24 hours" لضبط الجدول الزمني للتصدير. استخدام أيّ منهما بنية AppEngine cron.yaml أو تنسيق يونكس كرون (* * * * *).
    • تعديل collectionIds: [] لتصدير ما هو محدّد فقط مجموعات أخرى. يمكنك تركها كما هي لتصدير جميع المجموعات.

  4. نشر الدالة المُجدوَلة:

    firebase deploy --only functions
وحدة تحكُّم Google Cloud
إنشاء دالة سحابية
  1. انتقِل إلى صفحة وظائف Cloud في وحدة التحكّم في Google Cloud:

    الانتقال إلى وظائف السحابة الإلكترونية

  2. انقر على إنشاء دالة.
  3. أدخِل اسم دالة مثل firestoreExport.
  4. ضمن المشغّل، اختَر Cloud Pub/Sub.
  5. ضمن الموضوع، اختَر إنشاء موضوع جديد. يُرجى إدخال اسم موضوع الناشر/الفرعي، مثل initiateFirestoreExport. قم بتدوين اسم الموضوع باعتباره تحتاج إليها لإنشاء وظيفة Cloud Scheduler الخاصة بك.
  6. ضمن الرمز المصدر، اختَر المحرِّر المضمّن. أدخِل الرمز التالي ضمن 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: [] لتصدير ما هو محدّد فقط مجموعات أخرى. اترك الخيار كما هو لتصدير جميع المجموعات.

  7. ضمن package.json، أضِف التبعية التالية:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. ضمن الدالة المطلوب تنفيذها، أدخِل scheduledFirestoreExport، للدالة في index.js.
  9. انقر على إنشاء لنشر دالة Cloud.
إنشاء مهمة في "Cloud Scheduler"

بعد ذلك، أنشِئ مهمة Cloud Scheduler تستدعي دالة Cloud:

  1. انتقِل إلى صفحة Cloud Scheduler في Google Cloud Console:

    الانتقال إلى Cloud Scheduler

  2. انقر على إنشاء مهمة.
  3. أدخِل اسمًا للوظيفة، مثل "scheduledFirestoreExport".
  4. أدخِل معدّل تكرار، مثل every 24 hours.
  5. اختَر منطقة زمنية.
  6. ضمن الاستهداف، اختَر نشر/اشتراك. في الحقل الموضوع، أدخل اسم موضوع الناشر/الفرع الذي حددته بجانب دالة السحابة الإلكترونية، initiateFirestoreExport في المثال أعلاه.
  7. في الحقل حمولة، أدخِل start export. تتطلّب الوظيفة تحديد حمولة، ولكن دالة Cloud Function أعلاه لا تستخدم هذه القيمة في الواقع.
  8. انقر على إنشاء.
في هذه المرحلة، تكون قد نشرت وظيفتك على Cloud Function وCloud Scheduler المهمة، ولكن لا تزال وظيفة 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:
بدء Cloud Shell

  1. يمكنك منح دور مشرف تصدير استيراد البيانات في السحابة الإلكترونية. استبدال PROJECT_ID، وشغِّل الأمر التالي:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
  2. امنَح دور مشرف مساحة التخزين في حزمتك. استبدِل 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.

  1. انتقِل إلى صفحة Cloud Scheduler في وحدة التحكّم في Google Cloud.
    الانتقال إلى Cloud Scheduler

  2. في صف مهمة Cloud Scheduler الجديدة، انقر على تشغيل الآن.

    بعد بضع ثوانٍ، من المفترض أن يتم تعديل النتيجة في مهمة Cloud Scheduler. إلى تم بنجاح وآخر تشغيل للوقت الحالي. قد تحتاج إلى للنقر على إعادة التحميل.

تؤكد صفحة Cloud Scheduler فقط أن الوظيفة التي تحمل اسم وظيفة السحابة الإلكترونية. افتح صفحة "الدالة السحابية" للاطّلاع على سجلات الدالة.

عرض سجلّات وظائف السحابة الإلكترونية

لمعرفة ما إذا كانت دالة Cloud Function قد بدأت عملية تصدير بنجاح، افتح سجلات الدالة:

وحدة تحكُّم Firebase

انتقِل إلى صفحة Cloud Functions في "وحدة تحكُّم Firebase".

الانتقال إلى سجلّات الدوال

وحدة تحكّم Google Cloud Platform

انتقِل إلى صفحة Cloud Functions في وحدة التحكّم في Google Cloud.

الانتقال إلى Logs Viewer (عارض السجلات)

عرض مستوى تقدّم عملية التصدير

يمكنك استخدام الأمر gcloud firestore operations list لعرض مدى تقدم عمليات التصدير لديك، فراجع إدارة عمليات التصدير والاستيراد

بعد اكتمال عملية التصدير، يمكنك عرض ملفات الإخراج في مجموعة بيانات واحدة (Cloud Storage):

فتح متصفّح Cloud Storage