प्रोजेक्ट के बीच डेटा ट्रांसफ़र करना

इस पेज पर, मैनेज किए जा सकने वाले इंपोर्ट और एक्सपोर्ट की सुविधाओं का इस्तेमाल करके, Cloud Firestore डेटा को एक प्रोजेक्ट से दूसरे प्रोजेक्ट में ले जाने का तरीका बताया गया है. यह डेवलपमेंट एनवायरमेंट सेट अप करने या किसी ऐप्लिकेशन को हमेशा के लिए किसी दूसरे प्रोजेक्ट पर माइग्रेट करने के लिए फ़ायदेमंद हो सकता है. इस पेज पर दिए गए उदाहरण में, किसी सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करने और फिर उस डेटा को डेस्टिनेशन प्रोजेक्ट में इंपोर्ट करने का तरीका बताया गया है. प्रोजेक्ट के बीच डेटा ट्रांसफ़र करने के लिए, यह तरीका अपनाएं:

  1. अपने सोर्स प्रोजेक्ट का डेटा सेव करने के लिए, Cloud Storage बकेट बनाएं.
  2. अपने सोर्स प्रोजेक्ट से डेटा को बकेट में एक्सपोर्ट करें.
  3. अपने डेस्टिनेशन प्रोजेक्ट को, बकेट से डेटा पढ़ने की अनुमति दें.
  4. बकेट से डेटा को अपने डेस्टिनेशन प्रोजेक्ट में इंपोर्ट करें.

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

मैनेज की जाने वाली एक्सपोर्ट और इंपोर्ट सेवा का इस्तेमाल करने से पहले, आपको ये काम पूरे करने होंगे:

  1. अपने सोर्स प्रोजेक्ट और डेस्टिनेशन प्रोजेक्ट, दोनों के लिए बिलिंग की सुविधा चालू करें. एक्सपोर्ट और इंपोर्ट करने की सुविधा का इस्तेमाल सिर्फ़ Google Cloud उन प्रोजेक्ट के लिए किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.
  2. पक्का करें कि आपके खाते के पास, सोर्स प्रोजेक्ट और डेस्टिनेशन प्रोजेक्ट में, ज़रूरी Cloud IAM अनुमतियां हों. अगर आप दोनों प्रोजेक्ट के मालिक हैं, तो आपके खाते में ज़रूरी अनुमतियां होंगी. इसके अलावा, Cloud IAM की ये भूमिकाएं, Cloud Firestore एक्सपोर्ट और इंपोर्ट ऑपरेशन के लिए ज़रूरी अनुमतियां देती हैं:

    Owner, Cloud Datastore Owner या Cloud Datastore Import Export Admin

    प्रोजेक्ट का मालिक, ऐक्सेस दें में दिया गया तरीका अपनाकर, इनमें से कोई एक भूमिका दे सकता है.

  3. gcloud कमांड-लाइन टूल सेट अप करें और इनमें से किसी एक तरीके से अपने प्रोजेक्ट से कनेक्ट करें:

  4. अपने नए प्रोजेक्ट में इंडेक्स सेट अप करें. सोर्स और डेस्टिनेशन प्रोजेक्ट के बीच, कॉम्पोनेंट इंडेक्स मैच होने चाहिए. हर दस्तावेज़ को कई बार प्रोसेस करने से बचने के लिए, इंडेक्स पहले सेट अप होने चाहिए.

सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करना

Cloud Firestore एक्सपोर्ट फ़ाइलों के लिए Cloud Storage बकेट बनाकर और एक्सपोर्ट ऑपरेशन शुरू करके, अपना डेटा एक्सपोर्ट करें.

Cloud Storage बकेट बनाना

Cloud Firestore डेटाबेस के साथ-साथ, उसी जगह पर Cloud Storage बकेट बनाएं. अपने डेटाबेस की जगह देखने के लिए, अपनी प्रोजेक्ट की जगह की सेटिंग देखें. एक्सपोर्ट और इंपोर्ट के लिए, अनुरोध करने वाले के पैसे चुकाने वाली बकेट का इस्तेमाल नहीं किया जा सकता.

अगर आपकी Cloud Storage बकेट आपके सोर्स प्रोजेक्ट में नहीं है, तो आपको सोर्स प्रोजेक्ट के डिफ़ॉल्ट सेवा खाते को बकेट का ऐक्सेस देना होगा. हर Google Cloud प्रोजेक्ट में, PROJECT_ID@appspot.gserviceaccount.com नाम वाला डिफ़ॉल्ट सेवा खाता अपने-आप बन जाता है. Cloud Firestore एक्सपोर्ट ऑपरेशन, Cloud Storage बकेट ऑपरेशन को अनुमति देने के लिए इस डिफ़ॉल्ट सेवा खाते का इस्तेमाल करते हैं. डिफ़ॉल्ट सेवा खाते को अपनी सोर्स बकेट का ऐक्सेस देने के लिए, उसे Storage Admin की भूमिका दें.

Cloud Shell में मौजूद gsutil टूल की मदद से, यह भूमिका दी जा सकती है:

Cloud Shell शुरू करें

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\
gs://[BUCKET_NAME]@

Google Cloud कंसोल में जाकर भी यह भूमिका दी जा सकती है.

डेटा लिखने की सुविधा बंद करना (ज़रूरी नहीं)

अगर एक्सपोर्ट करने के दौरान आपका ऐप्लिकेशन डेटाबेस में डेटा लिखता रहता है, तो हो सकता है कि एक्सपोर्ट की गई फ़ाइलों में उस डेटा को कैप्चर न किया जा सके. डेटा को एक जैसी स्थिति से एक्सपोर्ट करने के लिए, अपने डेटाबेस में डेटा लिखने की सुविधा बंद करें. इसके लिए, सुरक्षा से जुड़े नियमों को अपडेट करें और Admin SDK के सभी ऑपरेशन रोकें.

  1. सुरक्षा के नियम अपडेट करना

    Console के Cloud 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
        }
      }
    
  2. Admin SDK टूल से डेटा लिखने की सुविधा रोकना

    सुरक्षा नियम, Firebase एडमिन SDK टूल या Google Cloud सर्वर क्लाइंट लाइब्रेरी का इस्तेमाल करके बनाए गए, खास सुविधाओं वाले सर्वर एनवायरमेंट से आने वाले डेटा को लिखने से नहीं रोकते. अपने सर्वर को बंद करके या अपडेट करके, एडमिन सर्वर से डेटा लिखने की प्रोसेस को रोकना न भूलें.

एक्सपोर्ट की प्रोसेस शुरू करना

अपने सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करने के लिए, gcloud firestore export कमांड का इस्तेमाल करें. आपके पास अपना पूरा डेटा या सिर्फ़ कुछ कलेक्शन एक्सपोर्ट करने का विकल्प होता है. [SOURCE_BUCKET] की जगह अपनी Cloud Storage बकेट का नाम डालें:

सारा डेटा एक्सपोर्ट करना
gcloud firestore export gs://[SOURCE_BUCKET] --async
खास कलेक्शन एक्सपोर्ट करना
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_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 टूल की मदद से, ज़रूरी भूमिकाएं दी जा सकती हैं:

Cloud Shell शुरू करें

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