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

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

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

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

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

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

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

इसके बाद, Cloud Function को डेटा एक्सपोर्ट करने और 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 इंपोर्ट एक्सपोर्ट एडमिन की भूमिका असाइन करें. बदलें 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 फ़ंक्शन. अपने फ़ंक्शन के लॉग देखने के लिए, Cloud Function पेज खोलें.

Cloud Function लॉग देखना

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

Firebase कंसोल

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

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

जीसीपी कंसोल

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

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

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

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

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

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