Перемещайте данные между проектами

На этой странице описано, как использовать функции управляемого импорта и экспорта для перемещения данных Cloud Firestore из одного проекта в другой. Это может быть полезно для настройки среды разработки или в рамках окончательной миграции приложения в другой проект. Пример на этой странице демонстрирует, как экспортировать данные из исходного проекта, а затем импортировать эти данные в целевой проект. Перемещение данных между проектами включает следующие шаги:

  1. Create a Cloud Storage bucket to hold the data from your source project.
  2. Экспортируйте данные из исходного проекта в хранилище.
  3. Предоставьте целевому проекту разрешение на чтение данных из хранилища.
  4. Импортируйте данные из хранилища в целевой проект.

Прежде чем начать

Прежде чем вы сможете использовать услугу управляемого экспорта и импорта, необходимо выполнить следующие задачи:

  1. Enable billing for both your source project and destination project. Only Google Cloud projects with billing enabled can use the export and import functionality.
  2. Убедитесь, что ваша учетная запись имеет необходимые разрешения Cloud IAM в исходном и целевом проектах. Если вы являетесь владельцем обоих проектов, ваша учетная запись имеет необходимые разрешения. В противном случае, следующие роли Cloud IAM предоставляют необходимые разрешения для операций экспорта и импорта Cloud Firestore :

    Owner , Cloud Datastore Owner или Cloud Datastore Import Export Admin

    Владелец проекта может предоставить одну из этих ролей, выполнив действия, описанные в разделе «Предоставление доступа» .

  3. Настройте инструмент командной строки gcloud и подключитесь к своему проекту одним из следующих способов:

  4. Настройте индексы в новом проекте. Составные индексы должны совпадать в исходном и целевом проектах. Индексы следует настраивать в первую очередь, чтобы избежать необходимости многократной обработки каждого документа.

Экспорт данных из исходного проекта

Для экспорта данных создайте хранилище 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 :

Запустить 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.

  1. Обновите правила безопасности

    На вкладке «Правила 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
        }
      }
    
  2. Остановить запись из Admin SDK

    Security rules do not stop writes coming from privileged server environments created using a Firebase Admin SDK or a Google Cloud Server Client Library . Make sure to halt write operations from your admin servers by shutting down or updating your servers.

Начать экспортную операцию

Use the gcloud firestore export command to export data from your source project. You can export all your data or only specific collection groups. Replace [SOURCE_BUCKET] with the name of your Cloud Storage bucket:

Экспорт всех данных
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

Импортируйте данные в целевой проект.

Next, give the destination project access to your Cloud Firestore data files and start an import operation.

Предоставьте целевому проекту доступ к вашим файлам данных.

Прежде чем начать операцию импорта, необходимо убедиться, что целевой проект имеет доступ к файлам данных Cloud Firestore .

Переместите файлы данных в локальный сегмент.

Если расположение исходного хранилища данных отличается от расположения Cloud Firestore целевого проекта, необходимо переместить файлы данных в хранилище Cloud Storage расположенное в том же месте, что и целевой проект.

Move your data files to another Cloud Storage bucket by following the steps in Moving and Renaming Buckets . For all the following steps, use this new bucket as the [SOURCE_BUCKET] .

Предоставьте учетной записи службы проекта доступ к вашему исходному репозиторию.

If your source bucket is not in your destination project, then you must give the destination project's default service account access to your source bucket. The default service account is named [DESTINATION_PROJECT_ID] @appspot.gserviceaccount.com . To give the default service account access to your source bucket, grant it the proper permissions to access the bucket.

Необходимые роли можно предоставить с помощью инструмента gsutil , доступного в Cloud Shell :

Start Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

Вы также можете предоставить эту роль в консоли Google Cloud .

Начать операцию импорта

Before starting the import operation, make sure gcloud is configured for the correct project:

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