डेटा एक्सपोर्ट शेड्यूल करना

इस पेज पर, Cloud Firestore डेटा के एक्सपोर्ट को शेड्यूल करने का तरीका बताया गया है. शेड्यूल के हिसाब से एक्सपोर्ट करने के लिए, हमारा सुझाव है कि आप Cloud Functions और Cloud Scheduler का इस्तेमाल करें.

शुरू करने से पहले

मैनेज किए जा रहे डेटा को एक्सपोर्ट करने का शेड्यूल तय करने से पहले, आपको ये काम करने होंगे:

  1. अपने Google Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें. सिर्फ़ Google Cloud के ऐसे प्रोजेक्ट के लिए एक्सपोर्ट और इंपोर्ट की सुविधा का इस्तेमाल किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.
  2. एक्सपोर्ट करने के लिए, डेस्टिनेशन Cloud Storage बकेट की ज़रूरत होती है. अपने Cloud Firestore डेटाबेस की जगह के आस-पास की जगह में, Cloud Storage बकेट बनाएं. एक्सपोर्ट करने के लिए, अनुरोध करने वाले से शुल्क लेने वाली बकेट का इस्तेमाल नहीं किया जा सकता.

Cloud फ़ंक्शन और Cloud Scheduler जॉब बनाना

Node.js Cloud फ़ंक्शन बनाने के लिए, यह तरीका अपनाएं. इससे 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 कंसोल
Cloud फ़ंक्शन बनाना
  1. Google Cloud Console में Cloud Functions पेज पर जाएं:

    Cloud Functions पर जाएं

  2. कोई फ़ंक्शन लिखें पर क्लिक करें
  3. फ़ंक्शन का नाम डालें, जैसे कि firestore-export
  4. ट्रिगर में जाकर, Cloud Pub/Sub को चुनें
  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) => {
      // Access the GCLOUD_PROJECT environment variable set by the runtime.
      const projectId =
        process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT;
      // Use the DATABASE_ID environment variable if set,
      // otherwise default to '(default)'
      const databaseId = process.env.DATABASE_ID || '(default)';
      const databaseName = client.databasePath(
        projectId,
        databaseId
      );
    
      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: [] में बदलाव करें. सभी कलेक्शन ग्रुप एक्सपोर्ट करने के लिए, इसे ऐसे ही छोड़ दें.

    • (ज़रूरी नहीं) अगर किसी ऐसे डेटाबेस का इस्तेमाल किया जा रहा है जो डिफ़ॉल्ट नहीं है, तो Cloud फ़ंक्शन बनाते समय DATABASE_ID एनवायरमेंट वैरिएबल सेट करना न भूलें. अगर ऐसे रनटाइम का इस्तेमाल किया जा रहा है जहां GOOGLE_CLOUD_PROJECT अपने-आप सेट नहीं होता है, तो आपको इसे मैन्युअल तरीके से सेट करना पड़ सकता है या कोड में इसे अपने प्रोजेक्ट आईडी से बदलना पड़ सकता है.

  7. package.json में, यह डिपेंडेंसी जोड़ें:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. एक्ज़ीक्यूट करने के लिए फ़ंक्शन में, scheduledFirestoreExport डालें. यह index.js में मौजूद फ़ंक्शन का नाम है.
  9. Cloud फ़ंक्शन को डिप्लॉय करने के लिए, Create पर क्लिक करें.
Cloud Scheduler जॉब बनाएं

इसके बाद, एक Cloud Scheduler जॉब बनाएं, जो आपके Cloud फ़ंक्शन को कॉल करे:

  1. Google Cloud Console में Cloud Scheduler पेज पर जाएं:

    Cloud Scheduler पर जाएं

  2. जॉब बनाएं पर क्लिक करें.
  3. जॉब के लिए कोई नाम डालें, जैसे कि scheduledFirestoreExport.
  4. फ़्रीक्वेंसी डालें. उदाहरण के लिए, every 24 hours.
  5. कोई टाइमज़ोन चुनें.
  6. टारगेट में जाकर, Pub/Sub को चुनें. विषय फ़ील्ड में, उस pub/sub विषय का नाम डालें जिसे आपने पिछले उदाहरण में, Cloud फ़ंक्शन, initiateFirestoreExport के साथ तय किया था.
  7. पेलोड फ़ील्ड में, start export डालें. जॉब के लिए पेलोड तय करना ज़रूरी है. हालांकि, इससे पहले वाला Cloud फ़ंक्शन, इस वैल्यू का इस्तेमाल नहीं करता.
  8. बनाएं पर क्लिक करें.
इस समय, आपने Cloud फ़ंक्शन और Cloud Scheduler जॉब को डिप्लॉय कर दिया है. हालांकि, एक्सपोर्ट की प्रोसेस को पूरा करने के लिए, आपके Cloud फ़ंक्शन को अब भी ऐक्सेस की अनुमतियों की ज़रूरत है.

ऐक्सेस की अनुमतियां कॉन्फ़िगर करना

इसके बाद, Cloud फ़ंक्शन को एक्सपोर्ट की प्रोसेस शुरू करने और GCS बकेट में डेटा लिखने की अनुमति दें.

यह Cloud Run फ़ंक्शन, एक्सपोर्ट की प्रोसेस की पुष्टि करने और अनुमति देने के लिए, सेवा खाते का इस्तेमाल करता है. इस्तेमाल किया जाने वाला सेवा खाता, आपके Cloud Functions कॉन्फ़िगरेशन पर निर्भर करता है:

  • Cloud Functions (पहली जनरेशन): यह App Engine डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है: PROJECT_ID@appspot.gserviceaccount.com
  • Cloud Functions (दूसरी जनरेशन): यह डिफ़ॉल्ट Compute Engine सेवा खाते का इस्तेमाल करता है: PROJECT_NUMBER-compute@developer.gserviceaccount.com

इस सेवा खाते को एक्सपोर्ट की प्रोसेस शुरू करने और Cloud Storage बकेट में डेटा लिखने की अनुमति चाहिए. ये अनुमतियां देने के लिए, सेवा खाते को ये आईएएम भूमिकाएं असाइन करें:

  • Cloud Datastore Import Export Admin
  • बकेट में Storage Admin की भूमिका
  • Cloud Run Invoker (ट्रिगर करने वाली सेवा को फ़ंक्शन शुरू करने की अनुमति देने के लिए, Cloud Functions (दूसरी जनरेशन) के लिए ज़रूरी है)

इन भूमिकाओं को असाइन करने के लिए, gcloud और gsutil कमांड-लाइन टूल का इस्तेमाल किया जा सकता है.

अगर ये टूल पहले से इंस्टॉल नहीं हैं, तो Google Cloud console में Cloud Shell पर जाकर इन्हें ऐक्सेस किया जा सकता है:
Cloud Shell शुरू करें

  1. Cloud Datastore Import Export Admin की भूमिका असाइन करें. PROJECT_ID और SERVICE_ACCOUNT (उदाहरण के लिए, PROJECT_ID@appspot.gserviceaccount.com या PROJECT_NUMBER-compute@developer.gserviceaccount.com) को बदलें और यह कमांड चलाएं:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:SERVICE_ACCOUNT \
        --role roles/datastore.importExportAdmin
  2. अपनी बकेट में स्टोरेज एडमिन की भूमिका असाइन करें. SERVICE_ACCOUNT और BUCKET_NAME को बदलें. इसके बाद, यह कमांड चलाएं:

    gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \
        gs://BUCKET_NAME
  3. (Cloud Functions (दूसरी जनरेशन) के लिए) सेवा खाते को Cloud Run इन्वोकर की भूमिका असाइन करें. PROJECT_ID और SERVICE_ACCOUNT को बदलें. इसके बाद, यह कमांड चलाएं:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:SERVICE_ACCOUNT \
        --role roles/run.invoker

अगर आपने App Engine के डिफ़ॉल्ट सेवा खाते को बंद कर दिया या मिटा दिया, तो आपके App Engine ऐप्लिकेशन के पास Cloud Firestore डेटाबेस का ऐक्सेस नहीं रहेगा. अगर आपने App Engine सेवा खाते को बंद कर दिया है, तो उसे फिर से चालू किया जा सकता है. इसके लिए, सेवा खाते को चालू करना देखें. अगर आपने पिछले 30 दिनों में अपना App Engine सेवा खाता मिटाया है, तो उसे वापस लाया जा सकता है. इसके लिए, सेवा खाता वापस लाना लेख पढ़ें.

Cloud Scheduler जॉब और Cloud फ़ंक्शन की जांच करना

Google Cloud Console के Cloud Scheduler पेज पर जाकर, Cloud Scheduler जॉब की जांच की जा सकती है.

  1. Google Cloud Console में Cloud Scheduler पेज पर जाएं.
    Cloud Scheduler पर जाएं

  2. अपने नए Cloud Scheduler जॉब की लाइन में, अभी चलाएं पर क्लिक करें.

    कुछ सेकंड बाद, Cloud Scheduler जॉब को नतीजे वाले कॉलम को सफल और पिछली बार चला को मौजूदा समय पर अपडेट करना चाहिए. आपको रीफ़्रेश करें पर क्लिक करना पड़ सकता है.

Cloud Scheduler पेज से सिर्फ़ यह पुष्टि होती है कि जॉब ने आपके Cloud फ़ंक्शन को कॉल किया है. अपने फ़ंक्शन के लॉग देखने के लिए, Cloud फ़ंक्शन पेज खोलें.

Cloud फ़ंक्शन के लॉग देखना

यह देखने के लिए कि Cloud फ़ंक्शन ने एक्सपोर्ट की प्रोसेस शुरू की है या नहीं, फ़ंक्शन के लॉग खोलें:

Firebase कंसोल

Firebase कंसोल में, होस्टिंग और सर्वरलेस > फ़ंक्शन पर जाएं.

फ़ंक्शन लॉग पर जाएं

जीसीपी कंसोल

Google Cloud Console में Cloud Functions पेज पर जाएं.

लॉग व्यूअर पर जाएं

एक्सपोर्ट की प्रोग्रेस देखना

gcloud firestore operations list कमांड का इस्तेमाल करके, एक्सपोर्ट की प्रोसेस की प्रोग्रेस देखी जा सकती है. इसके लिए, एक्सपोर्ट और इंपोर्ट की प्रोसेस को मैनेज करना लेख पढ़ें.

एक्सपोर्ट की प्रोसेस पूरी होने के बाद, आउटपुट फ़ाइलों को अपनी Cloud Storage बकेट में देखा जा सकता है:

Cloud Storage ब्राउज़र खोलें