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

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

قبل البدء

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

  1. تفعيل الفوترة لمشروعك Google Cloud. يمكن فقط للمشاريع التي تم تفعيل الفوترة فيها استخدام ميزة التصدير والاستيراد.Google Cloud
  2. تتطلب عمليات التصدير دلو الوجهة Cloud Storage. أنشئ Cloud Storage حزمة في موقع جغرافي قريب من الموقع الجغرافي لقاعدة بياناتكCloud Firestore. لا يمكنك استخدام حزمة Requester Pays لعمليات التصدير.

إنشاء وظيفة سحابية ووظيفة Cloud Scheduler

اتّبِع الخطوات التالية لإنشاء دالة Cloud Function في Node.js تبدأ عملية تصدير بيانات Cloud Firestore ومهمة Cloud Scheduler لاستدعاء هذه الدالة:

Firebase CLI
  1. تثبيت Firebase CLI. في دليل جديد، ابدأ واجهة سطر الأوامر الخاصة بـ 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 باسم الحزمة.
    • استبدِل YOUR_PROJECT_ID بمعرّف مشروعك.
    • عدِّل every 24 hours لضبط جدول التصدير. استخدم إما صيغة AppEngine cron.yaml أو تنسيق unix-cron (* * * * *).
    • عدِّل collectionIds: [] لتصدير مجموعات قوائم التسوق المحدّدة فقط. اتركها كما هي لتصدير جميع مجموعات المجموعات.

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

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

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

  2. انقر على كتابة دالة.
  3. أدخِل اسم دالة، مثل firestore-export
  4. ضمن المشغل، حدد النشر/الاشتراك السحابي
  5. ضمن الموضوع، حدد إنشاء موضوع جديد. أدخِل اسمًا لموضوع Pub/Sub، مثل 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(
        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: [] لتصدير مجموعات قوائم التسوق المحدّدة فقط. اتركها كما هي لتصدير جميع مجموعات المجموعات.

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

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

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

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

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

  1. امنح دور مشرف استيراد وتصدير Cloud Datastore. استبدِل 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

يمكنك اختبار Cloud Scheduler مهمتك في صفحة Cloud Scheduler ضمن وحدة تحكّم Google Cloud.

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

  2. في صف وظيفة 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:

افتح Cloud Storage