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

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

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

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

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

Cloud Function और a Cloud Scheduler जॉब बनाना

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

Firebase CLI
  1. Firebase CLI इंस्टॉल करें. नई डायरेक्ट्री में, Cloud Functions के लिए 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 की जगह, अपनी बकेट का नाम डालें.
    • YOUR_PROJECT_ID की जगह, अपना प्रोजेक्ट आईडी डालें
    • एक्सपोर्ट का शेड्यूल सेट करने के लिए, every 24 hours में बदलाव करें. AppEngine cron.yaml सिंटैक्स या unix-cron फ़ॉर्मैट (* * * * *) का इस्तेमाल करें.
    • सिर्फ़ चुने गए कलेक्शन ग्रुप एक्सपोर्ट करने के लिए, collectionIds: [] में बदलाव करें. सभी कलेक्शन ग्रुप एक्सपोर्ट करने के लिए, इसे ऐसे ही छोड़ दें.

  4. शेड्यूल किए गए फ़ंक्शन को डिप्लॉय करें:

    firebase deploy --only functions
Google Cloud कंसोल
Cloud Function बनाना
  1. Google Cloud कंसोल में, 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 Function बनाते समय, DATABASE_ID एनवायरमेंट वैरिएबल सेट किया गया हो. अगर ऐसे रनटाइम का इस्तेमाल किया जा रहा है जिसमें GOOGLE_CLOUD_PROJECT अपने-आप सेट नहीं होता, तो आपको इसे मैन्युअल तरीके से सेट करना पड़ सकता है या कोड में इसकी जगह अपना प्रोजेक्ट आईडी डालना पड़ सकता है.

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

इसके बाद, Cloud Scheduler जॉब बनाएं. यह आपके Cloud Function को कॉल करता है:

  1. Google Cloud कंसोल में, Cloud Scheduler पेज पर जाएं:

    पर जाएंCloud Scheduler

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

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

इसके बाद, Cloud Function को एक्सपोर्ट की कार्रवाइयां शुरू करने और आपकी 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 कंसोल में Cloud Shell से ऐक्सेस किया जा सकता है:
शुरू करेंCloud Shell

  1. Cloud Datastore इंपोर्ट/एक्सपोर्ट एडमिन की भूमिका असाइन करें. 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. अपनी बकेट पर Storage Admin की भूमिका असाइन करें. की जगह अपनी वैल्यू डालें और SERVICE_ACCOUNT और BUCKET_NAME चलाएं और यह कमांड चलाएं:

    gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \
        gs://BUCKET_NAME
  3. (Cloud Functions (दूसरी पीढ़ी) के लिए) सेवा खाते को Cloud Run Invoker की भूमिका असाइन करें. अपनी वैल्यू डालें और यह कमांड चलाएं:PROJECT_IDSERVICE_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 सेवा खाते को बंद कर दिया गया है, तो उसे फिर से चालू किया जा सकता है. इसके लिए, सेवा खाता चालू करना लेख पढ़ें. अगर App Engine सेवा खाते को पिछले 30 दिनों में मिटाया गया है, तो उसे वापस लाया जा सकता है. इसके लिए, सेवा खाता वापस लाना लेख पढ़ें.

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

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

  1. Google Cloud कंसोल में, Cloud Scheduler पेज पर जाएं.
    पर जाएंCloud Scheduler

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

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

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

Cloud Function के लॉग देखना

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

Firebase कंसोल

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

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

जीसीपी कंसोल

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

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

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

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

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

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