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

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

  1. قم بإنشاء مجموعة تخزين سحابية للاحتفاظ بالبيانات من مشروعك المصدر.
  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 Firestore الخاصة بك. لعرض موقع قاعدة البيانات الخاصة بك، راجع إعداد موقع المشروع الخاص بك. لا يمكنك استخدام حاوية "الطلب يدفع" لعمليات التصدير والاستيراد.

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

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

استخدم أمر gcloud firestore export لتصدير البيانات من مشروعك المصدر. يمكنك تصدير جميع بياناتك أو مجموعات محددة فقط. استبدل [SOURCE_BUCKET] باسم مجموعة التخزين السحابي الخاصة بك:

تصدير كافة البيانات
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 في نفس موقع مشروعك الوجهة.

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