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

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

إذا لم تكن حزمة Cloud Storage ضمن مشروعك المصدر، عليك منح حساب الخدمة التلقائي للمشروع المصدر إذن الوصول إلى الحزمة. يتم تلقائيًا إنشاء حساب خدمة تلقائي لكل مشروع Google Cloud باسم PROJECT_ID@appspot.gserviceaccount.com. تستخدم عمليات التصدير حساب الخدمة التلقائي هذا لتفويض عمليات الحزمة.Cloud FirestoreCloud 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 Console، انتقِل إلى قواعد البيانات ومساحة التخزين > 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 bucket:

تصدير جميع البيانات
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