На этой странице описывается, как использовать функции управляемого импорта и экспорта для перемещения данных Cloud Firestore из одного проекта в другой. Это может быть полезно для настройки среды разработки или как часть постоянной миграции приложения в другой проект. Пример на этой странице демонстрирует, как экспортировать данные из исходного проекта, а затем импортировать эти данные в целевой проект. Перемещение данных между проектами включает следующие шаги:
- Создайте контейнер 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 для операций экспорта и импорта.
Если ваш контейнер 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.
Обновите правила безопасности
На вкладке Cloud 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 Client Library . Обязательно остановите операции записи с ваших серверов администратора, выключив или обновив их.
Начать экспортную операцию
Используйте команду 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