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

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

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

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

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

Cloud Functions और Cloud Scheduler जॉब बनाना

Cloud Firestore से डेटा एक्सपोर्ट करने और उस फ़ंक्शन को कॉल करने के लिए Cloud Scheduler जॉब शुरू करने वाला Node.js Cloud फ़ंक्शन बनाने के लिए, यहां दिया गया तरीका अपनाएं:

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 की जगह अपने बकेट का नाम डालें.
    • एक्सपोर्ट करने का शेड्यूल सेट करने के लिए, 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. कोई फ़ंक्शन नाम डालें, जैसे कि firestoreExport
  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) => {
      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 Function को कॉल करे:

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

    Cloud Scheduler पर जाएं

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

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

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

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

PROJECT_ID@appspot.gserviceaccount.com

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

  • Cloud Datastore Import Export Admin
  • बकेट पर Owner या Storage Admin की भूमिका

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

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

  1. Cloud Datastore Import Export Admin की भूमिका असाइन करें. 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 सेवा खाता बंद कर दिया है, तो उसे फिर से चालू किया जा सकता है. इसके लिए, सेवा खाता चालू करना लेख पढ़ें. अगर आपने पिछले 30 दिनों में अपना App Engine सेवा खाता मिटाया है, तो उसे वापस लाया जा सकता है. इसके लिए, सेवा खाता वापस लाना लेख पढ़ें.

अपने Cloud Scheduler जॉब और Cloud Function की जांच करना

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

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

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

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

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

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

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

Firebase कंसोल

Firebase कंसोल में, Cloud Functions पेज पर जाएं.

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

जीसीपी कंसोल

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

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

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

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

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

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