На этой странице описано, как использовать функции управляемого импорта и экспорта для перемещения данных 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 в консоли обновите правила безопасности вашего исходного проекта, чтобы запретить все операции записи. Например:
// 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