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

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

    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 सर्वर क्लाइंट लाइब्रेरी का इस्तेमाल करके बनाए गए खास सर्वर एनवायरमेंट से आने वाले डेटा को लिखने से नहीं रोकते. अपने सर्वर को बंद या अपडेट करके, पक्का करें कि आपके एडमिन सर्वर से डेटा लिखने की प्रोसेस बंद हो.

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

अपने सोर्स प्रोजेक्ट से डेटा एक्सपोर्ट करने के लिए, 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 शुरू करें

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