This page describes how to use the managed import and export features to move Cloud Firestore data from one project to another. This can be useful for setting up a development environment or as part of permanently migrating an app to another project. The example on this page demonstrates how to export data from a source project and then import that data into a destination project. Moving data between projects involves the following steps:
- Создайте хранилище Cloud Storage для хранения данных из вашего исходного проекта.
- Экспортируйте данные из исходного проекта в хранилище.
- Предоставьте целевому проекту разрешение на чтение данных из хранилища.
- Импортируйте данные из хранилища в целевой проект.
Прежде чем начать
Прежде чем вы сможете использовать услугу управляемого экспорта и импорта, необходимо выполнить следующие задачи:
- Включите выставление счетов как для исходного, так и для целевого проекта. Функции экспорта и импорта доступны только для проектов Google Cloud с включенным выставлением счетов.
Убедитесь, что ваша учетная запись имеет необходимые разрешения Cloud IAM в исходном и целевом проектах. Если вы являетесь владельцем обоих проектов, ваша учетная запись имеет необходимые разрешения. В противном случае, следующие роли 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 . Чтобы просмотреть расположение вашей базы данных, см. настройки расположения вашего проекта . Вы не можете использовать сегмент Requester Pays или сегмент Rapid для операций экспорта и импорта.
If your Cloud Storage bucket is not in your source project , you must give the source project's default service account access to the bucket. Each Google Cloud project has an automatically created default service account with the name PROJECT_ID @appspot.gserviceaccount.com . Cloud Firestore export operations use this default service account to authorize Cloud Storage bucket operations. To give the default service account access to your source bucket, grant it the Storage Admin role.
Вы можете предоставить эту роль с помощью инструмента gsutil , доступного в Cloud Shell :
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
Вы также можете предоставить эту роль в консоли Google Cloud .
Отключить операции записи (необязательно)
Если ваше приложение продолжает записывать данные в базу данных во время операции экспорта, вы можете не зафиксировать все эти записи в файлах экспорта. Для экспорта данных из согласованного состояния отключите запись в базу данных, обновив правила безопасности и остановив все операции Admin SDK.
Обновите правила безопасности
В консоли Firebase перейдите в раздел «Базы данных и хранилища» > «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 } }Остановить запись из Admin SDK
Правила безопасности не блокируют операции записи с привилегированных серверных сред, созданных с использованием Firebase Admin SDK или клиентской библиотеки Google Cloud Server . Обязательно остановите операции записи с ваших административных серверов, выключив или обновив их.
Начать экспортную операцию
Используйте команду ` gcloud firestore export для экспорта данных из исходного проекта. Вы можете экспортировать все данные или только определенные группы коллекций. Замените ` [SOURCE_BUCKET] на имя вашего сегмента Cloud Storage :
- Экспорт всех данных
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Экспорт отдельных групп коллекций
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_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