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

इस पेज पर बताया गया है कि 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. एडमिन 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