इस पेज पर, मैनेज किए गए इंपोर्ट और एक्सपोर्ट की सुविधाओं का इस्तेमाल करके, एक प्रोजेक्ट से दूसरे प्रोजेक्ट में Cloud Firestore डेटा ट्रांसफ़र करने का तरीका बताया गया है. यह डेवलपमेंट एनवायरमेंट सेट अप करने या किसी ऐप्लिकेशन को हमेशा के लिए किसी दूसरे प्रोजेक्ट में माइग्रेट करने के लिए काम आ सकता है. इस पेज पर दिए गए उदाहरण में, सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करने और फिर उस डेटा को डेस्टिनेशन प्रोजेक्ट में इंपोर्ट करने का तरीका बताया गया है. एक प्रोजेक्ट से दूसरे प्रोजेक्ट में डेटा ट्रांसफ़र करने के लिए, यह तरीका अपनाएं:
- अपने सोर्स प्रोजेक्ट से डेटा को सेव करने के लिए, Cloud Storage बकेट बनाएं.
- अपने सोर्स प्रोजेक्ट से डेटा को बकेट में एक्सपोर्ट करें.
- अपने डेस्टिनेशन प्रोजेक्ट को बकेट से डेटा पढ़ने की अनुमति दें.
- बकेट से डेटा को अपने डेस्टिनेशन प्रोजेक्ट में इंपोर्ट करें.
शुरू करने से पहले
मैनेज की गई एक्सपोर्ट और इंपोर्ट सेवा का इस्तेमाल करने से पहले, आपको ये टास्क पूरे करने होंगे:
- अपने सोर्स प्रोजेक्ट और डेस्टिनेशन प्रोजेक्ट, दोनों के लिए बिलिंग चालू करें. एक्सपोर्ट और इंपोर्ट करने की सुविधा का इस्तेमाल सिर्फ़ उन Google Cloud प्रोजेक्ट के लिए किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.
-
पक्का करें कि आपके खाते के पास सोर्स प्रोजेक्ट और डेस्टिनेशन प्रोजेक्ट में, Cloud IAM की ज़रूरी अनुमतियां हों. अगर आप दोनों प्रोजेक्ट के मालिक हैं, तो आपके खाते के पास ज़रूरी अनुमतियां हैं. इसके अलावा, Cloud IAM की ये भूमिकाएं, Cloud Firestore के लिए ज़रूरी अनुमतियां देती हैं: एक्सपोर्ट और इंपोर्ट करने की कार्रवाइयां:
Owner,Cloud Datastore OwnerयाCloud Datastore Import Export Adminप्रोजेक्ट का मालिक, इनमें से कोई भूमिका असाइन कर सकता है. इसके लिए, उसे ऐक्सेस देना में दिया गया तरीका अपनाना होगा.
-
gcloudकमांड-लाइन टूल सेट अप करें और अपने प्रोजेक्ट से कनेक्ट करें. इसके लिए, इनमें से कोई एक तरीका अपनाएं:-
Cloud Shell का इस्तेमाल करके, Google Cloud कंसोल से
gcloudको ऐक्सेस करें.पक्का करें कि
gcloudको सही प्रोजेक्ट के लिए कॉन्फ़िगर किया गया हो:gcloud config set project [SOURCE_PROJECT_ID]
-
-
अपने नए प्रोजेक्ट में इंडेक्स सेट अप करें. सोर्स और डेस्टिनेशन प्रोजेक्ट के कंपोज़िट इंडेक्स मेल खाने चाहिए. हर दस्तावेज़ को कई बार प्रोसेस करने से बचने के लिए, इंडेक्स पहले सेट अप किए जाने चाहिए.
सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करना
अपने डेटा को एक्सपोर्ट करने के लिए, Cloud Storage एक्सपोर्ट फ़ाइलों के लिए Cloud Storage बकेट बनाएं और एक्सपोर्ट की प्रोसेस शुरू करें.Cloud Firestore
Cloud Storage बकेट बनाना
अपने Cloud Firestore डेटाबेस की तरह ही, उसी जगह पर Cloud Storage बकेट बनाएं. अपने डेटाबेस की जगह की जानकारी देखने के लिए, प्रोजेक्ट की जगह की जानकारी की सेटिंग देखें. एक्सपोर्ट और इंपोर्ट करने के लिए, अनुरोध करने वाले के खाते से पेमेंट करने वाले बकेट या रैपिड बकेट का इस्तेमाल नहीं किया जा सकता.
अगर आपका Cloud Storage बकेट, आपके सोर्स प्रोजेक्ट में नहीं है, तो आपको सोर्स प्रोजेक्ट के डिफ़ॉल्ट सेवा खाते को बकेट का ऐक्सेस देना होगा. हर Google Cloud प्रोजेक्ट
में, अपने-आप एक डिफ़ॉल्ट सेवा खाता बन जाता है. इसका नाम PROJECT_ID@appspot.gserviceaccount.com होता है. Cloud Firestore
एक्सपोर्ट करने की कार्रवाइयों में, इस डिफ़ॉल्ट सेवा खाते का इस्तेमाल किया जाता है. इससे Cloud Storage
बकेट से जुड़ी कार्रवाइयों को अनुमति मिलती है. डिफ़ॉल्ट सेवा खाते को अपने सोर्स बकेट का ऐक्सेस देने के लिए, उसे Storage Admin भूमिका असाइन करें.
यह भूमिका, Cloud Shell में उपलब्ध gsutil टूल की मदद से असाइन की जा सकती है:
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
Google Cloud कंसोल में जाकर भी यह भूमिका असाइन की जा सकती है.
लिखने की कार्रवाइयां बंद करें (ज़रूरी नहीं)
अगर एक्सपोर्ट करने की प्रोसेस के दौरान आपका ऐप्लिकेशन डेटाबेस में डेटा सेव करता रहता है, तो हो सकता है कि एक्सपोर्ट की गई फ़ाइलों में वह सारा डेटा शामिल न हो. डेटा को एक जैसी स्थिति में एक्सपोर्ट करने के लिए, अपने डेटाबेस में लिखने की सुविधा बंद करें. इसके लिए, सुरक्षा से जुड़े नियमों को अपडेट करें और एडमिन एसडीके की सभी कार्रवाइयों को रोकें.
सुरक्षा के नियमों को अपडेट करना
Firebase कंसोल में, डेटाबेस और स्टोरेज > Firestore > नियम टैब पर जाएं.
अपने सोर्स प्रोजेक्ट के सुरक्षा नियमों को अपडेट करें, ताकि सभी राइट को अस्वीकार किया जा सके. उदाहरण के लिए:
// Deny write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow write: if false; } // Reads do not affect export operations // Add your read rules here } }Admin SDK से किए जाने वाले राइट ऑपरेशन को रोकना
सुरक्षा के नियम, Firebase Admin SDK या Google Cloud Server Client Library का इस्तेमाल करके बनाए गए, खास अधिकार वाले सर्वर एनवायरमेंट से आने वाले राइट को नहीं रोकते. अपने एडमिन सर्वर से राइट ऑपरेशन को रोकने के लिए, अपने सर्वर बंद करें या उन्हें अपडेट करें.
एक्सपोर्ट करने की प्रोसेस शुरू करना
अपने सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करने के लिए, gcloud firestore export कमांड का इस्तेमाल करें. आपके पास अपना पूरा डेटा या सिर्फ़ कुछ कलेक्शन ग्रुप एक्सपोर्ट करने का विकल्प होता है. [SOURCE_BUCKET] की जगह अपने Cloud Storage बकेट का नाम डालें:
- सारा डेटा एक्सपोर्ट करें
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- चुनिंदा कलेक्शन ग्रुप एक्सपोर्ट करना
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async
अपने एक्सपोर्ट ऑपरेशन के outputURIPrefix को नोट कर लें, क्योंकि आपको इसका इस्तेमाल बाद में करना होगा. डिफ़ॉल्ट रूप से, Cloud Firestore टाइमस्टैंप के आधार पर, एक्सपोर्ट की गई फ़ाइलों में प्रीफ़िक्स जोड़ता है:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
एक्सपोर्ट की प्रोसेस के दौरान, firestore operations list
कमांड का इस्तेमाल करके, प्रोसेस की प्रोग्रेस देखी जा सकती है:
gcloud firestore operations list
डेस्टिनेशन प्रोजेक्ट में डेटा इंपोर्ट करना
इसके बाद, डेस्टिनेशन प्रोजेक्ट को अपनी Cloud Firestore डेटा फ़ाइलों का ऐक्सेस दें और इंपोर्ट करने की प्रोसेस शुरू करें.
डेस्टिनेशन प्रोजेक्ट को अपनी डेटा फ़ाइलों का ऐक्सेस देना
इंपोर्ट की प्रोसेस शुरू करने से पहले, आपको यह पक्का करना होगा कि आपका डेस्टिनेशन प्रोजेक्ट, Cloud Firestore डेटा फ़ाइलों को ऐक्सेस कर सकता हो.
डेटा फ़ाइलों को किसी लोकल बकेट में ले जाना
अगर आपके सोर्स बकेट की जगह, डेस्टिनेशन प्रोजेक्ट की Cloud Firestore जगह से अलग है, तो आपको अपनी डेटा फ़ाइलों को उसी जगह के Cloud Storage बकेट में ले जाना होगा जहां आपका डेस्टिनेशन प्रोजेक्ट है.
बकेट का नाम बदलना और उन्हें ट्रांसफ़र करना लेख में दिए गए निर्देशों का पालन करके, अपनी डेटा फ़ाइलों को किसी दूसरे Cloud Storage बकेट में ट्रांसफ़र करें.
यहां दिए गए सभी चरणों के लिए, इस नए बकेट को [SOURCE_BUCKET] के तौर पर इस्तेमाल करें.
प्रोजेक्ट के सेवा खाते को अपने सोर्स बकेट का ऐक्सेस देना
अगर आपका सोर्स बकेट, डेस्टिनेशन प्रोजेक्ट में नहीं है, तो आपको डेस्टिनेशन प्रोजेक्ट के डिफ़ॉल्ट सेवा खाते को अपने सोर्स बकेट का ऐक्सेस देना होगा. डिफ़ॉल्ट सेवा खाते का नाम [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com है. डिफ़ॉल्ट सेवा खाते को सोर्स बकेट का ऐक्सेस देने के लिए, उसे बकेट को ऐक्सेस करने की सही अनुमतियां दें.
Cloud Shell में उपलब्ध gsutil टूल का इस्तेमाल करके, ज़रूरी भूमिकाएं असाइन की जा सकती हैं:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
Google Cloud कंसोल में जाकर भी यह भूमिका असाइन की जा सकती है.
इंपोर्ट करने की प्रोसेस शुरू करना
डेटा इंपोर्ट करने की प्रोसेस शुरू करने से पहले, पक्का करें कि gcloud को सही प्रोजेक्ट के लिए कॉन्फ़िगर किया गया हो:
gcloud config set project [DESTINATION_PROJECT_ID]
अपने सोर्स बकेट में मौजूद डेटा को डेस्टिनेशन प्रोजेक्ट में इंपोर्ट करने के लिए, gcloud firestore import कमांड का इस्तेमाल करें:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
यहां [EXPORT_PREFIX], एक्सपोर्ट ऑपरेशन के outputUriPrefix में मौजूद प्रीफ़िक्स से मेल खाता है. उदाहरण के लिए:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
एक्सपोर्ट की प्रोसेस के दौरान, firestore operations list
कमांड का इस्तेमाल करके, प्रोसेस की प्रोग्रेस देखी जा सकती है:
gcloud firestore operations list