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

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

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

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

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

Cloud Function और Cloud Scheduler जॉब बनाएं

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

Firebase CLI
  1. Firebase सीएलआई इंस्टॉल करें. नई डायरेक्ट्री में, 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 कंसोल
कोई क्लाउड फ़ंक्शन बनाएं
  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 चुनें. विषय फ़ील्ड में, ऊपर दिए गए उदाहरण में, अपने Cloud Function के साथ-साथ, initiateFirestoreExport pub/sub विषय का नाम डालें.
  7. पेलोड फ़ील्ड में, start export डालें. जॉब के लिए, एक पेलोड तय करना ज़रूरी है. हालांकि, ऊपर दिया गया Cloud फ़ंक्शन, असल में इस वैल्यू का इस्तेमाल नहीं करता.
  8. बनाएं पर क्लिक करें.
इस समय, आपने अपने Cloud Function और Cloud Scheduler जॉब को डिप्लॉय कर दिया है. हालांकि, एक्सपोर्ट की कार्रवाइयां करने के लिए, आपके Cloud Function को अब भी ऐक्सेस की अनुमतियों की ज़रूरत है.

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

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

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

PROJECT_ID@appspot.gserviceaccount.com

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

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

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

अगर ये टूल पहले से इंस्टॉल नहीं हैं, तो इन्हें Google Cloud कंसोल में Cloud Shell से ऐक्सेस किया जा सकता है:
शुरू करें 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 सेवा खाता बंद कर दिया है, तो उसे फिर से चालू किया जा सकता है. सेवा खाता चालू करना लेख पढ़ें. अगर आपने पिछले 30 दिनों में App Engine सेवा खाता मिटाया है, तो आपके पास अपने सेवा खाते को वापस लाने का विकल्प है. इसके लिए, सेवा खाता वापस लाना देखें.

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

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

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

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

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

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

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

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

Firebase कंसोल

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

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

जीसीपी कंसोल

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

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

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

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

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

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