शेड्यूल डेटा निर्यात

यह पृष्ठ बताता है कि अपने क्लाउड फायरस्टोर डेटा के निर्यात को कैसे शेड्यूल करें। निर्यात को एक शेड्यूल पर चलाने के लिए, हम क्लाउड फ़ंक्शंस और क्लाउड शेड्यूलर का उपयोग करने की सलाह देते हैं।

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

प्रबंधित डेटा निर्यात शेड्यूल करने से पहले, आपको निम्नलिखित कार्य पूरे करने होंगे:

  1. अपने Google क्लाउड प्रोजेक्ट के लिए बिलिंग सक्षम करें। केवल बिलिंग सक्षम Google क्लाउड प्रोजेक्ट ही निर्यात और आयात सुविधा का उपयोग कर सकते हैं।
  2. निर्यात संचालन के लिए एक गंतव्य क्लाउड स्टोरेज बकेट की आवश्यकता होती है। अपने क्लाउड फायरस्टोर डेटाबेस स्थान के निकट किसी स्थान पर क्लाउड स्टोरेज बकेट बनाएं । आप निर्यात कार्यों के लिए अनुरोधकर्ता भुगतान बकेट का उपयोग नहीं कर सकते।

एक क्लाउड फ़ंक्शन और एक क्लाउड शेड्यूलर कार्य बनाएँ

Node.js क्लाउड फ़ंक्शन बनाने के लिए नीचे दिए गए चरणों का पालन करें जो क्लाउड फायरस्टोर डेटा निर्यात शुरू करता है और उस फ़ंक्शन को कॉल करने के लिए क्लाउड शेड्यूलर कार्य करता है:

फायरबेस सीएलआई
  1. फायरबेस सीएलआई स्थापित करें । एक नई निर्देशिका में, क्लाउड फ़ंक्शंस के लिए सीएलआई प्रारंभ करें:

    firebase init functions --project PROJECT_ID
    1. भाषा के लिए जावास्क्रिप्ट चुनें.
    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 सिंटैक्स या यूनिक्स-क्रॉन प्रारूप ( * * * * * ) का उपयोग करें।
    • collectionIds: [] केवल निर्दिष्ट संग्रह समूहों को निर्यात करने के लिए। सभी संग्रहों को निर्यात करना वैसे ही छोड़ दें।

  4. निर्धारित फ़ंक्शन तैनात करें:

    firebase deploy --only functions
जीसीपी कंसोल
एक क्लाउड फ़ंक्शन बनाएं
  1. GCP कंसोल में क्लाउड फ़ंक्शंस पृष्ठ पर जाएँ:

    क्लाउड फ़ंक्शंस पर जाएँ

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

इसके बाद, एक क्लाउड शेड्यूलर जॉब बनाएं जो आपके क्लाउड फ़ंक्शन को कॉल करे:

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

    क्लाउड शेड्यूलर पर जाएं

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

पहुंच अनुमतियाँ कॉन्फ़िगर करें

इसके बाद, क्लाउड फ़ंक्शन को निर्यात संचालन शुरू करने और अपने जीसीएस बकेट में लिखने की अनुमति दें।

यह क्लाउड फ़ंक्शन अपने निर्यात संचालन को प्रमाणित और अधिकृत करने के लिए आपके प्रोजेक्ट के डिफ़ॉल्ट सेवा खाते का उपयोग करता है। जब आप कोई प्रोजेक्ट बनाते हैं, तो आपके लिए निम्नलिखित नाम से एक डिफ़ॉल्ट सेवा खाता बनाया जाता है:

PROJECT_ID@appspot.gserviceaccount.com

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

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

आप इन भूमिकाओं को निर्दिष्ट करने के लिए gcloud और gsutil कमांड-लाइन टूल का उपयोग कर सकते हैं।

यदि पहले से इंस्टॉल नहीं है, तो आप Google क्लाउड प्लेटफ़ॉर्म कंसोल में क्लाउड शेल से इन टूल तक पहुंच सकते हैं:
क्लाउड शेल प्रारंभ करें

  1. क्लाउड डेटास्टोर आयात निर्यात व्यवस्थापक भूमिका निर्दिष्ट करें। 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
    

यदि आप अपने ऐप इंजन डिफ़ॉल्ट सेवा खाते को अक्षम या हटा देते हैं, तो आपका ऐप इंजन ऐप आपके क्लाउड फायरस्टोर डेटाबेस तक पहुंच खो देगा। यदि आपने अपना ऐप इंजन सेवा खाता अक्षम कर दिया है, तो आप इसे पुनः सक्षम कर सकते हैं, सेवा खाता सक्षम करना देखें। यदि आपने पिछले 30 दिनों के भीतर अपना ऐप इंजन सेवा खाता हटा दिया है, तो आप अपना सेवा खाता पुनर्स्थापित कर सकते हैं, सेवा खाता हटाना रद्द करना देखें।

अपने क्लाउड शेड्यूलर कार्य और क्लाउड फ़ंक्शन का परीक्षण करें

आप Google क्लाउड प्लेटफ़ॉर्म कंसोल के क्लाउड शेड्यूलर पृष्ठ में अपने क्लाउड शेड्यूलर कार्य का परीक्षण कर सकते हैं।

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

  2. अपने नए क्लाउड शेड्यूलर कार्य की पंक्ति में, अभी चलाएँ पर क्लिक करें।

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

क्लाउड शेड्यूलर पृष्ठ केवल यह पुष्टि करता है कि कार्य ने आपके क्लाउड फ़ंक्शन को कॉल किया है। अपने फ़ंक्शन के लॉग देखने के लिए क्लाउड फ़ंक्शन पृष्ठ खोलें।

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

यह देखने के लिए कि क्या क्लाउड फ़ंक्शन ने सफलतापूर्वक निर्यात ऑपरेशन शुरू किया है, फ़ंक्शन के लॉग खोलें:

फायरबेस कंसोल

फायरबेस कंसोल में क्लाउड फ़ंक्शंस पृष्ठ पर जाएँ।

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

जीसीपी कंसोल

GCP कंसोल में क्लाउड फ़ंक्शंस पृष्ठ पर जाएँ।

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

निर्यात प्रगति देखें

आप अपने निर्यात कार्यों की प्रगति देखने, निर्यात और आयात संचालन को प्रबंधित करने के लिए gcloud firestore operations list कमांड का उपयोग कर सकते हैं।

निर्यात ऑपरेशन पूरा होने के बाद, आप अपने क्लाउड स्टोरेज बकेट में आउटपुट फ़ाइलें देख सकते हैं:

क्लाउड स्टोरेज ब्राउज़र खोलें