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

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

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

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

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

    لا تمنع قواعد الأمان عمليات الكتابة الواردة من بيئات الخادم ذات الامتيازات التي تم إنشاؤها باستخدام حزمة تطوير البرامج (SDK) الخاصة بخدمة Firebase Admin أو مكتبة برامج Google Cloud Server Client. احرص على إيقاف عمليات الكتابة من خوادم المشرفين من خلال إيقاف الخوادم أو تعديلها.

بدء عملية تصدير

استخدِم الأمر 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 console.

بدء عملية استيراد

قبل بدء عملية الاستيراد، تأكَّد من ضبط 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