На этой странице описано, как использовать функции управляемого импорта и экспорта для переноса данных Cloud Firestore из одного проекта в другой. Это может быть полезно при настройке среды разработки или при переносе приложения в другой проект. В примере на этой странице показано, как экспортировать данные из исходного проекта, а затем импортировать их в целевой проект. Перемещение данных между проектами включает следующие шаги:
- Создайте сегмент Cloud Storage для хранения данных из исходного проекта.
- Экспортируйте данные из исходного проекта в сегмент.
- Предоставьте целевому проекту разрешение на чтение из сегмента.
- Импортируйте данные из сегмента в целевой проект.
Подготовка
Прежде чем использовать управляемый сервис экспорта и импорта, необходимо выполнить следующие задачи:
- Включите платежные функции для исходного и целевого проектов. Функции экспорта и импорта доступны только в проектах Google Cloud с включенными платежными функциями.
-
Убедитесь, что у вашего аккаунта есть необходимые разрешения Cloud IAM в исходном и целевом проектах. Если вы являетесь владельцем обоих проектов, у вашего аккаунта есть необходимые разрешения. В противном случае необходимые разрешения для операций экспорта и импорта в Cloud Firestore предоставляют следующие роли Cloud IAM:
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.
Отключите операции записи (необязательно)
Если приложение продолжает записывать данные в базу данных во время экспорта, некоторые из этих записей могут не попасть в экспортируемые файлы. Чтобы экспортировать данные из согласованного состояния, отключите запись в базу данных, обновив правила безопасности и остановив все операции Admin SDK.
Обновить правила безопасности
В консоли Firebase перейдите в раздел Databases & Storage (Базы данных и хранилище) > Firestore > вкладка Rules (Правила).
Обновите правила безопасности исходного проекта, чтобы запретить все операции записи. Пример:
// 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