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

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

शुरू करें 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. सुरक्षा के नियम अपडेट करना

    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
        }
      }
    
  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_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 टूल की मदद से, ज़रूरी भूमिकाएं दी जा सकती हैं:Cloud Shell

शुरू करें 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