نقل البيانات بين المشاريع

توضّح هذه الصفحة كيفية استخدام ميزتَي الاستيراد والتصدير المُدارتَين لنقل بيانات 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 Firestore وبدء عملية التصدير.

إنشاء حزمة Cloud Storage

أنشئ حزمة Cloud Storage في الموقع الجغرافي نفسه لقاعدة بيانات Cloud Firestore. للاطّلاع على الموقع الجغرافي لقاعدة البيانات، يُرجى مراجعة إعداد الموقع الجغرافي للمشروع. لا يمكنك استخدام حزمة "يدفع مقدّم الطلب" أو حزمة Rapid لعمليات التصدير والاستيراد.

إذا لم يكن حزمة تخزين Cloud Storage في مشروع المصدر، يجب منح حساب الخدمة التلقائي لمشروع المصدر إذن الوصول إلى حزمة التخزين. يحتوي كل مشروع على Google Cloud على حساب خدمة تلقائي تم إنشاؤه تلقائيًا باسم PROJECT_ID@appspot.gserviceaccount.com. Cloud Firestore تستخدم عمليات التصدير حساب الخدمة التلقائي هذا لمنح الإذن لعمليات حزمة Cloud Storage. لمنح حساب الخدمة التلقائي إذن الوصول إلى حزمة المصدر، يجب منحه دور Storage Admin.

يمكنك منح هذا الدور باستخدام أداة 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.

إيقاف عمليات الكتابة (اختياري)

إذا استمر تطبيقك في الكتابة في قاعدة البيانات أثناء إجراء عملية تصدير، قد لا يتم تسجيل كل عمليات الكتابة هذه في ملفات التصدير. لتصدير البيانات من حالة متسقة، يمكنك إيقاف عمليات الكتابة في قاعدة البيانات عن طريق تعديل قواعد الأمان وإيقاف أي عمليات في مدير 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. إيقاف عمليات الكتابة من حِزم SDK للمشرف

    لا تمنع قواعد الأمان عمليات الكتابة الواردة من بيئات الخوادم المميّزة التي تم إنشاؤها باستخدام مدير SDK في Firebase أو مكتبة برامج خادم 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. لمنح حساب الخدمة التلقائي إذن الوصول إلى حزمة المصدر، يجب منحه الأذونات المناسبة للوصول إلى الحزمة.

يمكنك منح الأدوار اللازمة باستخدام أداة 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