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

توضح هذه الصفحة كيفية جدولة عمليات تصدير بيانات Cloud Firestore. لتنفيذ عمليات التصدير وفقًا لجدول زمني، ننصحك باستخدام دوال Cloud و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. في دليل جديد، ابدأ في إعداد واجهة سطر الأوامر لدوال السحابة الإلكترونية:

    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. انتقِل إلى صفحة دوال Cloud في وحدة تحكُّم Google Cloud Platform:

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

  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. انتقِل إلى صفحة أداة جدولة في السحابة الإلكترونية في وحدة تحكُّم Google Cloud Platform:

    الانتقال إلى "أداة جدولة المهام في السحابة الإلكترونية"

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

ضبط أذونات الوصول

بعد ذلك، امنح دالّة السحابة الإلكترونية إذنًا لبدء عمليات التصدير والكتابة إلى حزمة 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

  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 Platform.

  1. انتقِل إلى صفحة أداة جدولة في السحابة الإلكترونية في وحدة تحكُّم Google Cloud Platform.
    الانتقال إلى Cloud Scheduler

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

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

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

عرض سجلات Cloud Function

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

وحدة تحكُّم Firebase

انتقِل إلى صفحة وظائف السحابة الإلكترونية في وحدة تحكُّم Firebase.

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

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

انتقِل إلى صفحة وظائف السحابة الإلكترونية في وحدة تحكُّم Google Cloud Platform.

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

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

يمكنك استخدام الأمر gcloud firestore operations list لمعرفة مستوى تقدُّم عمليات التصدير والاطّلاع على إدارة عمليات التصدير والاستيراد.

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

فتح متصفّح Cloud Storage