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

इस पेज पर, मैनेज किए गए इंपोर्ट और एक्सपोर्ट की सुविधाओं का इस्तेमाल करने का तरीका बताया गया है. इनकी मदद से, 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 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 टूल की मदद से दी जा सकती है:

शुरू करें Cloud Shell

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

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

लिखने की कार्रवाइयां बंद करना (ज़रूरी नहीं)

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

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

    कंसोल के 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 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_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