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

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

    لا تمنع قواعد الأمان عمليات الكتابة الواردة من بيئات الخادم المميّزة التي تم إنشاؤها باستخدام حزمة تطوير البرامج (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_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