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

توضح هذه الصفحة كيفية استخدام ميزات الاستيراد والتصدير المُدارة. لنقل بيانات Cloud Firestore من مشروع إلى آخر. يمكن أن يكون ذلك مفيدًا لإعداد بيئة تطوير أو كجزء من نقل تطبيق بشكل دائم إلى مشروع آخر. يوضح المثال في هذه الصفحة كيفية تصدير البيانات من المصدر ثم استيراد تلك البيانات إلى مشروع وجهة. نقل البيانات بين المشروعات يتضمن الخطوات التالية:

  1. أنشِئ حزمة على Cloud Storage للاحتفاظ بالبيانات من مشروعك المصدر.
  2. يمكنك تصدير البيانات من المشروع المصدر إلى الحزمة.
  3. امنح مشروع الوجهة إذنًا للقراءة من الحزمة.
  4. استورِد البيانات من الحزمة إلى مشروعك الوجهة.

قبل البدء

قبل أن تتمكن من استخدام خدمة التصدير والاستيراد المُدارة، يجب إكمال المهام التالية:

  1. تفعيل للفوترة لكل من مشروعك المصدر مشروع الوجهة Google Cloud فقط المشاريع التي تم تفعيل الفوترة بها يمكنها استخدام وظيفة التصدير والاستيراد.
  2. تأكَّد من أنّ حسابك يتضمّن ما يلزم من "إدارة الهوية وإمكانية الوصول من Cloud" الأذونات في المشروع المصدر المشروع الوجهة. إذا كنت مالك مشروع لكلا المشروعَين، يتضمّن حسابك المتطلبات الأذونات وبخلاف ذلك، سيتم منح أدوار 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 قاعدة البيانات. لعرض موقع قاعدة البيانات، راجِع إعدادات موقع المشروع. لا يمكنك استخدام حزمة "يدفع الطالب" لعمليات التصدير والاستيراد.

إذا لم تكن حزمة 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. تعديل قواعد الأمان

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

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