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

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

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

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

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

Cloud Function और Cloud शेड्यूलर जॉब बनाएं

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

Firebase CLI
  1. Firebase सीएलआई इंस्टॉल करें. नई डायरेक्ट्री में, 'सीएलआई' को शुरू करें Cloud के फ़ंक्शन:

    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
जीसीपी कंसोल
कोई Cloud फ़ंक्शन बनाएं
  1. GCP कंसोल में Cloud Functions पेज पर जाएं:

    Cloud Functions पर जाएं

  2. फ़ंक्शन बनाएं पर क्लिक करें
  3. फ़ंक्शन का नाम डालें, जैसे कि firestoreExport
  4. ट्रिगर में जाकर, Cloud Pub/Sub चुनें
  5. विषय में जाकर, नया विषय बनाएं को चुनें. इसके लिए कोई नाम डालें pub/sub विषय, जैसे कि initiateFirestoreExport. विषय के नाम को इस तरह नोट करें: आपको अपना Cloud शेड्यूलर जॉब बनाने के लिए इसकी ज़रूरत पड़ेगी.
  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 Function को कॉल करता हो:

  1. GCP कंसोल में क्लाउड शेड्यूलर पेज पर जाएं:

    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 शेड्यूलर को डिप्लॉय कर लिया है जॉब है, लेकिन आपके Cloud Function को अब भी एक्ज़ीक्यूट करने के लिए ऐक्सेस की अनुमतियां चाहिए एक्सपोर्ट ऑपरेशन.

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

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

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

PROJECT_ID@appspot.gserviceaccount.com

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

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

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

अगर पहले से इंस्टॉल नहीं है, तो इन्हें ऐक्सेस किया जा सकता है Google Cloud Platform कंसोल में 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 Function की जांच करें

आप अपने क्लाउड शेड्यूलर कार्य की जांच इसके क्लाउड शेड्यूलर पृष्ठ पर कर सकते हैं Google Cloud Platform Console पर जाएं.

  1. GCP कंसोल में क्लाउड शेड्यूलर पेज पर जाएं.
    क्लाउड शेड्यूलर पर जाएं

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

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

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

Cloud Function लॉग देखना

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

Firebase कंसोल

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

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

जीसीपी कंसोल

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

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

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

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

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

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