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

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

قبل ان تبدأ

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

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

قم بإنشاء وظيفة سحابية ومهمة جدولة سحابية

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

Firebase CLI
  1. قم بتثبيت Firebase CLI . في دليل جديد، قم بتهيئة واجهة سطر الأوامر (CLI) لوظائف السحابة:

    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 أو تنسيق unix-cron ( * * * * * ).
    • تعديل collectionIds: [] لتصدير مجموعات المجموعة المحددة فقط. اتركه كما هو لتصدير كافة المجموعات.

  4. نشر الوظيفة المجدولة:

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

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

  2. انقر فوق إنشاء وظيفة
  3. أدخل اسم وظيفة مثل firestoreExport
  4. ضمن المشغل ، حدد Cloud Pub/Sub
  5. ضمن الموضوع ، حدد إنشاء موضوع جديد . أدخل اسمًا لموضوع النشر/الفرعي، مثل initiateFirestoreExport . قم بتدوين اسم الموضوع لأنك تحتاجه لإنشاء مهمة Cloud Scholer الخاصة بك.
  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. ضمن الوظيفة المراد تنفيذها ، أدخل اسم الوظيفة في index.js ، scheduledFirestoreExport .
  9. انقر فوق "إنشاء" لنشر وظيفة السحابة.
إنشاء مهمة جدولة السحابة

بعد ذلك، قم بإنشاء مهمة Cloud Scholer التي تستدعي وظيفة السحابة الخاصة بك:

  1. انتقل إلى صفحة Cloud Scholer في وحدة تحكم GCP:

    انتقل إلى جدولة السحابة

  2. انقر فوق إنشاء وظيفة .
  3. أدخل اسمًا للمهمة مثل scheduledFirestoreExport .
  4. أدخل التردد ، على سبيل المثال، every 24 hours .
  5. حدد المنطقة الزمنية .
  6. ضمن الهدف ، حدد Pub/Sub . في حقل الموضوع ، أدخل اسم الموضوع النشر/الفرعي الذي حددته إلى جانب وظيفة السحابة الخاصة بك، initiateFirestoreExport في المثال أعلاه.
  7. في حقل الحمولة ، أدخل start export . تتطلب المهمة حمولة محددة، لكن وظيفة السحابة أعلاه لا تستخدم هذه القيمة فعليًا.
  8. انقر فوق إنشاء .
في هذه المرحلة، قمت بنشر وظيفة السحابة ووظيفة جدولة السحابة، ولكن وظيفة السحابة الخاصة بك لا تزال بحاجة إلى أذونات الوصول لتنفيذ عمليات التصدير.

تكوين أذونات الوصول

بعد ذلك، امنح وظيفة Cloud Function الإذن لبدء عمليات التصدير والكتابة إلى مجموعة GCS الخاصة بك.

تستخدم هذه الوظيفة السحابية حساب الخدمة الافتراضي لمشروعك للمصادقة والترخيص لعمليات التصدير الخاصة به. عند إنشاء مشروع، يتم إنشاء حساب خدمة افتراضي لك بالاسم التالي:

PROJECT_ID@appspot.gserviceaccount.com

يتطلب حساب الخدمة هذا إذنًا لبدء عملية التصدير والكتابة إلى مجموعة التخزين السحابي الخاصة بك. لمنح هذه الأذونات، قم بتعيين أدوار IAM التالية لحساب الخدمة الافتراضي:

  • Cloud Datastore Import Export Admin
  • دور Owner أو Storage Admin في المجموعة

يمكنك استخدام أدوات سطر الأوامر gcloud و gsutil لتعيين هذه الأدوار.

إذا لم تكن مثبتة بالفعل، يمكنك الوصول إلى هذه الأدوات من Cloud Shell في Google Cloud Platform 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 Scholer في صفحة Cloud Scholer في Google Cloud Platform Console.

  1. انتقل إلى صفحة Cloud Scholer في وحدة تحكم GCP.
    انتقل إلى جدولة السحابة

  2. في الصف الخاص بمهمة Cloud Scholer الجديدة، انقر فوق التشغيل الآن .

    بعد بضع ثوانٍ، يجب أن تقوم مهمة Cloud Scholer بتحديث عمود النتيجة إلى Success و Last run إلى الوقت الحالي. قد تحتاج إلى النقر فوق "تحديث" .

تؤكد صفحة "جدولة السحابة" فقط أن المهمة تسمى "وظيفة السحابة" الخاصة بك. افتح صفحة Cloud Function لرؤية سجلات وظيفتك.

عرض سجلات وظيفة السحابة

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

وحدة تحكم Firebase

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

انتقل إلى سجلات الوظائف

وحدة تحكم Google Cloud Platform

انتقل إلى صفحة وظائف السحابة في وحدة تحكم GCP.

انتقل إلى عارض السجلات

عرض تقدم التصدير

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

بعد اكتمال عملية التصدير، يمكنك عرض ملفات الإخراج في مجموعة التخزين السحابي الخاصة بك:

افتح متصفح التخزين السحابي