توضّح هذه الصفحة كيفية استخدام ميزتَي الاستيراد والتصدير المُدارَين لنقل بيانات Cloud Firestore من أحد المشاريع إلى آخر. يمكن أن يكون ذلك مفيدًا لإعداد بيئة تطوير أو كجزء من نقل تطبيق إلى مشروع آخر بشكل دائم. يوضّح المثال في هذه الصفحة كيفية تصدير البيانات من مشروع مصدر ثم استيراد هذه البيانات إلى مشروع وجهة. تتضمن عملية نقل البيانات بين المشاريع الخطوات التالية:
- أنشئ حزمة Cloud Storage لتخزين البيانات من مشروعك المصدر.
- تصدير البيانات من مشروعك المصدر إلى الحزمة
- امنح مشروع الوجهة إذنًا بالقراءة من الحزمة.
- استورِد البيانات من الحزمة إلى المشروع المقصود.
قبل البدء
لكي تتمكّن من استخدام خدمة التصدير والاستيراد المُدارة، عليك إكمال المهام التالية:
- فعِّل الفوترة لكلٍّ من المشروع المصدر والمشروع المقصود. لا يمكن استخدام وظيفة التصدير والاستيراد إلا في Google Cloud المشاريع التي تم تفعيل الفوترة فيها.
-
تأكَّد من أنّ حسابك لديه أذونات إدارة الهوية وإمكانية الوصول اللازمة في Cloud في مشروع المصدر ومشروع الوجهة. إذا كنت مالكًا للمشروعَين، سيتوفّر لحسابك الأذونات المطلوبة. بخلاف ذلك، تمنح أدوار Cloud IAM التالية الأذونات اللازمة Cloud Firestore لعمليات التصدير والاستيراد:
Owner
أوCloud Datastore Owner
أوCloud Datastore Import Export Admin
يمكن لمالك المشروع منح أحد هذين الدورَين باتّباع الخطوات الواردة في منح الإذن بالوصول.
-
إعداد أداة سطر الأوامر
gcloud
والاتصال بمشروعك بإحدى الطريقتَين التاليتَين:-
يمكنك الوصول إلى
gcloud
من وحدة تحكّم Google Cloud باستخدام Cloud Shell.تأكَّد من ضبط
gcloud
للمشروع الصحيح:gcloud config set project [SOURCE_PROJECT_ID]
-
-
إعداد الفهارس في مشروعك الجديد يجب أن تتطابق المؤشرات المركبة بين المشروعَين المصدر والوجهة. يجب إعداد الفهارس أولاً لتجنُّب الحاجة إلى معالجة كل مستند عدة مرات.
تصدير البيانات من المشروع المصدر
يمكنك تصدير بياناتك من خلال إنشاء حزمة 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:
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
يمكنك أيضًا منح هذا الدور في وحدة تحكّم Google Cloud.
إيقاف عمليات الكتابة (اختياري)
إذا استمر تطبيقك في الكتابة في قاعدة بياناتك أثناء تنفيذ عملية تصدير، قد لا يتم تسجيل كل عمليات الكتابة هذه في ملفات التصدير. لتصدير البيانات من حالة متّسقة، أوقِف عمليات الكتابة إلى قاعدة بياناتك من خلال تعديل قواعد الأمان وإيقاف أي عمليات في "حِزم تطوير البرامج (SDK) للمشرف".
تعديل قواعد الأمان
في علامة التبويب 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 } }
إيقاف عمليات الكتابة من حِزم SDK للمشرف
لا تمنع قواعد الأمان عمليات الكتابة الواردة من بيئات الخادم المميّزة التي تم إنشاؤها باستخدام حزمة تطوير البرامج (SDK) لوحدة تحكّم المشرف في Firebase أو مكتبة العميل لخدمة Google Cloud لخوادم. احرص على إيقاف عمليات الكتابة من خوادم المشرف من خلال إيقاف الخوادم أو تحديثها.
بدء عملية تصدير
استخدِم الأمر gcloud firestore export
لتصدير data
من مشروعك المصدر. يمكنك تصدير جميع بياناتك أو
مجموعات معيّنة فقط. استبدِل [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:
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