इस पेज पर, Cloud Firestore के डेटा को एक्सपोर्ट करने की प्रोसेस को शेड्यूल करने का तरीका बताया गया है. शेड्यूल के मुताबिक एक्सपोर्ट करने के लिए, हमारा सुझाव है कि आप Cloud Functions और Cloud Scheduler का इस्तेमाल करें.
शुरू करने से पहले
मैनेज किए गए डेटा एक्सपोर्ट को शेड्यूल करने से पहले, आपको ये काम पूरे करने होंगे:
- अपने Google Cloud प्रोजेक्ट के लिए बिलिंग चालू करें. एक्सपोर्ट और इंपोर्ट करने की सुविधा का इस्तेमाल सिर्फ़ उन Google Cloud प्रोजेक्ट के लिए किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.
- एक्सपोर्ट करने के लिए, डेस्टिनेशन Cloud Storage बकेट की ज़रूरत होती है. अपने Cloud Firestore डेटाबेस की जगह के आस-पास की जगह पर Cloud Storage बकेट बनाएं. एक्सपोर्ट करने के लिए, अनुरोध करने वाले के पेमेंट वाले बकेट का इस्तेमाल नहीं किया जा सकता.
Cloud Functions और Cloud Scheduler जॉब बनाना
Cloud Firestore डेटा एक्सपोर्ट करने और उस फ़ंक्शन को कॉल करने के लिए Cloud Scheduler जॉब शुरू करने वाला Node.js Cloud फ़ंक्शन बनाने के लिए, यह तरीका अपनाएं:
Firebase CLI
-
Firebase CLI इंस्टॉल करें. नई डायरेक्ट्री में, Cloud Functions के लिए सीएलआई शुरू करें:
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 फ़ंक्शन बनाना
-
Google Cloud Console में, 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) => { // Access the GCLOUD_PROJECT environment variable set by the runtime. const projectId = process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT; // Use the DATABASE_ID environment variable if set, // otherwise default to '(default)' const databaseId = process.env.DATABASE_ID || '(default)'; const databaseName = client.databasePath( projectId, databaseId ); 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: []में बदलाव करें. सभी कलेक्शन ग्रुप एक्सपोर्ट करने के लिए, इसे ऐसे ही रहने दें. -
(ज़रूरी नहीं) अगर डिफ़ॉल्ट डेटाबेस के अलावा किसी और डेटाबेस का इस्तेमाल किया जा रहा है, तो पक्का करें कि Cloud Functions बनाते समय आपने
DATABASE_IDएनवायरमेंट वैरिएबल सेट किया हो. अगर ऐसे रनटाइम का इस्तेमाल किया जा रहा है जहांGOOGLE_CLOUD_PROJECTअपने-आप सेट नहीं होता है, तो आपको इसे मैन्युअल तरीके से सेट करना पड़ सकता है. इसके अलावा, कोड में इसे अपने प्रोजेक्ट आईडी से बदलना भी पड़ सकता है.
package.jsonमें जाकर, यह डिपेंडेंसी जोड़ें:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }- लागू किया जाने वाला फ़ंक्शन में,
scheduledFirestoreExportडालें. यहindex.jsमें मौजूद फ़ंक्शन का नाम है. - Cloud फ़ंक्शन को डिप्लॉय करने के लिए, बनाएं पर क्लिक करें.
Cloud Scheduler जॉब बनाना
इसके बाद, एक Cloud Scheduler जॉब बनाएं, जो आपके Cloud Function को कॉल करे:
-
Google Cloud Console में Cloud Scheduler पेज पर जाएं:
- जॉब बनाएं पर क्लिक करें.
- जॉब के लिए कोई नाम डालें. जैसे,
scheduledFirestoreExport. - कोई फ़्रीक्वेंसी डालें. उदाहरण के लिए,
every 24 hours. - कोई टाइमज़ोन चुनें.
- टारगेट में जाकर, Pub/Sub को चुनें. विषय फ़ील्ड में, उस Pub/Sub विषय का नाम डालें जिसे आपने Cloud फ़ंक्शन
initiateFirestoreExportके साथ तय किया था. यह नाम, ऊपर दिए गए उदाहरण में मौजूद है. - Payload फ़ील्ड में,
start exportडालें. इस नौकरी के लिए, पेलोड तय करना ज़रूरी है. हालांकि, इससे पहले वाला Cloud फ़ंक्शन इस वैल्यू का इस्तेमाल नहीं करता. - बनाएं पर क्लिक करें.
ऐक्सेस करने की अनुमतियां कॉन्फ़िगर करना
इसके बाद, Cloud Function को एक्सपोर्ट की प्रोसेस शुरू करने और आपके GCS बकेट में डेटा लिखने की अनुमति दें.
यह Cloud Run फ़ंक्शन, सेवा खाते का इस्तेमाल करके पुष्टि करता है और एक्सपोर्ट करने की कार्रवाइयों को अनुमति देता है. इस्तेमाल किया गया सेवा खाता, आपके Cloud Functions कॉन्फ़िगरेशन पर निर्भर करता है:
- Cloud Functions (पहली जनरेशन): यह App Engine डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है:
PROJECT_ID@appspot.gserviceaccount.com - Cloud Functions (दूसरी जनरेशन): इसमें डिफ़ॉल्ट Compute Engine
सेवा खाते का इस्तेमाल होता है:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
इस सेवा खाते को एक्सपोर्ट की प्रोसेस शुरू करने और आपकी Cloud Storage बकेट में डेटा लिखने की अनुमति चाहिए. ये अनुमतियां देने के लिए, सेवा खाते को आईएएम की ये भूमिकाएं असाइन करें:
Cloud Datastore Import Export AdminStorage Adminकी भूमिकाCloud Run Invoker(Cloud Functions (दूसरी जनरेशन) के लिए ज़रूरी है, ताकि ट्रिगर करने वाली सेवा फ़ंक्शन को चालू कर सके)
इन भूमिकाओं को असाइन करने के लिए, gcloud और gsutil कमांड-लाइन टूल का इस्तेमाल किया जा सकता है.
अगर ये टूल पहले से इंस्टॉल नहीं हैं, तो Google Cloud Console में Cloud Shell पर जाकर इन्हें ऐक्सेस किया जा सकता है:
शुरू करें Cloud Shell
-
Cloud Datastore इंपोर्ट/एक्सपोर्ट एडमिन की भूमिका असाइन करें. PROJECT_ID और SERVICE_ACCOUNT (जैसे,
PROJECT_ID@appspot.gserviceaccount.comयाPROJECT_NUMBER-compute@developer.gserviceaccount.com) की जगह ये डालें और यहां दिया गया निर्देश चलाएं:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/datastore.importExportAdmin -
अपने बकेट में स्टोरेज एडमिन की भूमिका असाइन करें. SERVICE_ACCOUNT और BUCKET_NAME को बदलें. इसके बाद, यह कमांड चलाएं:
gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \ gs://BUCKET_NAME -
(Cloud Functions (दूसरी जनरेशन) के लिए) सेवा खाते को Cloud Run इनवोकर की भूमिका असाइन करें. PROJECT_ID और SERVICE_ACCOUNT को बदलें. इसके बाद, यह कमांड चलाएं:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/run.invoker
App Engine डिफ़ॉल्ट सेवा खाता बंद करने या मिटाने पर, आपके App Engine ऐप्लिकेशन के पास आपके Cloud Firestore डेटाबेस का ऐक्सेस नहीं रहेगा. अगर आपने App Engine सेवा खाता बंद कर दिया है, तो उसे फिर से चालू किया जा सकता है. इसके लिए, सेवा खाता चालू करना लेख पढ़ें. अगर आपने पिछले 30 दिनों में अपना App Engine सेवा खाता मिटाया है, तो उसे वापस लाया जा सकता है. इसके लिए, सेवा खाते को वापस लाना लेख पढ़ें.
अपनी Cloud Scheduler नौकरी और Cloud Function की जांच करना
Google Cloud Console के Cloud Scheduler पेज पर जाकर, Cloud Schedulerजॉब की जांचCloud Scheduler की जा सकती है.
Google Cloud Console में, Cloud Scheduler पेज पर जाएं.
Cloud Scheduler पर जाएंअपनी नई Cloud Scheduler नौकरी की लाइन में, अभी चलाएं पर क्लिक करें.
कुछ सेकंड बाद, Cloud Scheduler जॉब को नतीजे वाले कॉलम को Success और Last run को मौजूदा समय पर अपडेट करना चाहिए. आपको रीफ़्रेश करें पर क्लिक करना पड़ सकता है.
Cloud Scheduler पेज से सिर्फ़ यह पुष्टि होती है कि नौकरी ने आपके Cloud फ़ंक्शन को कॉल किया है. अपने फ़ंक्शन के लॉग देखने के लिए, Cloud Function पेज खोलें.
Cloud Functions के लॉग देखना
यह देखने के लिए कि Cloud Function ने एक्सपोर्ट करने की प्रोसेस शुरू की है या नहीं, फ़ंक्शन के लॉग खोलें:
Firebase कंसोल
Firebase कंसोल में, होस्टिंग और सर्वरलेस > फ़ंक्शन पर जाएं.
जीसीपी कंसोल
Google Cloud Console में, Cloud Functions पेज पर जाएं.
एक्सपोर्ट की प्रोग्रेस देखना
एक्सपोर्ट की कार्रवाइयों की प्रोग्रेस देखने के लिए, gcloud firestore operations list कमांड का इस्तेमाल किया जा सकता है. एक्सपोर्ट और इंपोर्ट की कार्रवाइयों को मैनेज करना लेख पढ़ें.
एक्सपोर्ट की प्रोसेस पूरी होने के बाद, Cloud Storage बकेट में आउटपुट फ़ाइलें देखी जा सकती हैं: