इस पेज पर, आपके Cloud Firestore डेटा के एक्सपोर्ट शेड्यूल करने का तरीका बताया गया है. शेड्यूल के मुताबिक एक्सपोर्ट करने के लिए, हमारा सुझाव है कि Cloud Functions और Cloud Scheduler का इस्तेमाल करें.
शुरू करने से पहले
मैनेज किए गए डेटा एक्सपोर्ट शेड्यूल करने से पहले, आपको ये काम पूरे करने होंगे:
- अपने Google Cloud प्रोजेक्ट के लिए बिलिंग चालू करें. सिर्फ़ वे Google Cloud प्रोजेक्ट, एक्सपोर्ट और इंपोर्ट की सुविधा का इस्तेमाल कर सकते हैं जिनके लिए बिलिंग चालू है.
- एक्सपोर्ट की कार्रवाइयों के लिए, डेस्टिनेशन के तौर पर Cloud Storage बकेट की ज़रूरत होती है. अपने डेटाबेस की जगह के आस-पास किसी जगह पर, Cloud Storage बकेट Cloud Firestoreबनाएं. एक्सपोर्ट की कार्रवाइयों के लिए, 'अनुरोध करने वाला व्यक्ति पेमेंट करेगा' बकेट का इस्तेमाल नहीं किया जा सकता.
Cloud Function और एक Cloud Scheduler जॉब बनाना
Node.js Cloud Function बनाने के लिए, यहां दिया गया तरीका अपनाएं. यह Cloud Function, Cloud Firestore डेटा एक्सपोर्ट शुरू करता है. साथ ही, इस फ़ंक्शन को कॉल करने के लिए, Cloud Scheduler जॉब भी बनाएं:
Firebase CLI
-
Firebase CLI इंस्टॉल करें. नई डायरेक्ट्री में, Cloud Functions के लिए CLI शुरू करें:
firebase init functions --project PROJECT_ID
- भाषा के लिए JavaScript को चुनें.
- ज़रूरी नहीं, ESLint को चालू करें.
- डिपेंडेंसी इंस्टॉल करने के लिए,
yडालें.
-
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'); }); });
-
ऊपर दिए गए कोड में, इनमें बदलाव करें:
BUCKET_NAMEकी जगह अपनी बकेट का नाम डालें.YOUR_PROJECT_IDकी जगह अपना प्रोजेक्ट आईडी डालें- एक्सपोर्ट का शेड्यूल सेट करने के लिए,
every 24 hoursमें बदलाव करें. AppEngine cron.yaml सिंटैक्स या unix-cron फ़ॉर्मैट (* * * * *) का इस्तेमाल करें. -
सिर्फ़ तय किए गए कलेक्शन ग्रुप एक्सपोर्ट करने के लिए,
collectionIds: []में बदलाव करें. सभी कलेक्शन ग्रुप एक्सपोर्ट करने के लिए, इसे ऐसे ही छोड़ दें.
-
शेड्यूल किए गए फ़ंक्शन को डिप्लॉय करें:
firebase deploy --only functions
Google Cloud कंसोल
Cloud Function बनाना
-
Google Cloud कंसोल में, Cloud Functions पेज पर जाएं:
- कोई फ़ंक्शन लिखें पर क्लिक करें
- कोई फ़ंक्शन नाम डालें. जैसे,
firestore-export - ट्रिगर में जाकर, Cloud Pub/Sub को चुनें
- विषय में जाकर, नया विषय बनाएं को चुनें. pub/sub विषय के लिए कोई नाम डालें. जैसे,
initiateFirestoreExport. विषय का नाम नोट करें, क्योंकि आपको जॉब बनाने के लिए इसकी ज़रूरत पड़ेगी.Cloud Scheduler - **सोर्स कोड** में जाकर, **इनलाइन एडिटर** को चुनें.
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( YOUR_PROJECT_ID, '(default)' ); 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: []में बदलाव करें. सभी कलेक्शन ग्रुप एक्सपोर्ट करने के लिए, इसे ऐसे ही छोड़ दें.
package.jsonमें, यह डिपेंडेंसी जोड़ें:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }- एक्ज़ीक्यूट करने के लिए फ़ंक्शन में,
scheduledFirestoreExportमें मौजूद फ़ंक्शन का नाम डालें. जैसे,index.js. - Cloud Function को डिप्लॉय करने के लिए, बनाएं पर क्लिक करें.
Cloud Scheduler जॉब बनाना
इसके बाद, Cloud Scheduler जॉब बनाएं. यह जॉब, आपके Cloud Function को कॉल करती है:
-
Google Cloud कंसोल में, Cloud Scheduler पेज पर जाएं:
- जॉब बनाएं पर क्लिक करें.
- जॉब के लिए कोई नाम डालें. जैसे,
scheduledFirestoreExport. - फ़्रीक्वेंसी डालें. जैसे,
every 24 hours. - कोई समय क्षेत्र चुनें.
- **डेस्टिनेशन** में जाकर, **Pub/Sub** को चुनें. विषय फ़ील्ड में, pub/sub विषय का नाम डालें. यह नाम, आपने अपने Cloud Function के साथ तय किया था. ऊपर दिए गए उदाहरण में, यह नाम
initiateFirestoreExportहै. - पेलोड फ़ील्ड में,
start exportडालें. जॉब के लिए, पेलोड तय करना ज़रूरी है. हालांकि, ऊपर दिया गया Cloud Function, असल में इस वैल्यू का इस्तेमाल नहीं करता है. - बनाएं पर क्लिक करें.
ऐक्सेस की अनुमतियां कॉन्फ़िगर करना
इसके बाद, Cloud Function को एक्सपोर्ट की कार्रवाइयां शुरू करने और आपकी GCS बकेट में लिखने की अनुमति दें.
यह Cloud Function, एक्सपोर्ट की कार्रवाइयों की पुष्टि करने और उन्हें अनुमति देने के लिए, आपके प्रोजेक्ट के डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है. प्रोजेक्ट बनाने पर, आपके लिए डिफ़ॉल्ट सेवा खाता बनाया जाता है. इसका नाम यह होता है:
PROJECT_ID@appspot.gserviceaccount.com
इस सेवा खाते को, एक्सपोर्ट की कार्रवाई शुरू करने और आपकी Cloud Storage बकेट में लिखने की अनुमति चाहिए. ये अनुमतियां देने के लिए, डिफ़ॉल्ट सेवा खाते को आईएएम की ये भूमिकाएं असाइन करें:
Cloud Datastore Import Export Admin-
OwnerयाStorage Adminबकेट पर भूमिका
इन भूमिकाओं को असाइन करने के लिए, gcloud और gsutil कमांड-लाइन
टूल का इस्तेमाल किया जा सकता है.
अगर ये टूल पहले से इंस्टॉल नहीं हैं, तो इन्हें Google Cloud कंसोल में Cloud Shell से ऐक्सेस किया जा सकता है:
शुरू करेंCloud Shell
-
Cloud Datastore इंपोर्ट/एक्सपोर्ट एडमिन की भूमिका असाइन करें. की जगह अपना प्रोजेक्ट आईडी डालें और यह कमांड चलाएं:PROJECT_ID
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
अपनी बकेट पर स्टोरेज एडमिन की भूमिका असाइन करें. की जगह अपना 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 जॉब और Cloud Function की जांच करना
Google Cloud कंसोल के Cloud Scheduler पेज पर जाकर, अपने Cloud Scheduler जॉब की जांच की जा सकती है.
Google Cloud कंसोल में, Cloud Scheduler पेज पर जाएं.
पर जाएंCloud Schedulerअपने नए Cloud Scheduler जॉब की लाइन में, अभी चलाएं पर क्लिक करें.
कुछ सेकंड बाद, Cloud Scheduler जॉब को नतीजे वाले कॉलम में सफ़ल और पिछली बार कब चला कॉलम में मौजूदा समय के साथ अपडेट करना चाहिए. आपको रीफ़्रेश करें पर क्लिक करना पड़ सकता है.
Cloud Scheduler पेज से सिर्फ़ यह पुष्टि होती है कि जॉब ने आपके Cloud Function को कॉल किया है. अपने फ़ंक्शन के लॉग देखने के लिए, Cloud Function पेज खोलें.
Cloud Function के लॉग देखना
यह देखने के लिए कि Cloud Function ने एक्सपोर्ट की कार्रवाई शुरू की है या नहीं, फ़ंक्शन के लॉग खोलें:
Firebase कंसोल
Firebase कंसोल में, Cloud Functions पेज पर जाएं.
जीसीपी कंसोल
Google Cloud कंसोल में, Cloud Functions पेज पर जाएं.
एक्सपोर्ट की प्रोसेस देखना
एक्सपोर्ट की कार्रवाइयों की प्रोसेस देखने के लिए, gcloud firestore operations list कमांड का इस्तेमाल किया जा सकता है. इसके लिए, एक्सपोर्ट और इंपोर्ट की कार्रवाइयां मैनेज करना लेख पढ़ें.
एक्सपोर्ट की कार्रवाई पूरी होने के बाद, Cloud Storage बकेट में आउटपुट फ़ाइलें देखी जा सकती हैं:
ब्राउज़र खोलेंCloud Storage