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