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