Firestore: как переносить данные между учетными записями / проектами

Недавно мне пришлось перенести данные из Cloud Firestore между учетными записями Firebase и проектами. Мне очень понравился этот опыт, и я решил поделиться с вами, как сделать этот процесс, который включает дамп и восстановление данных.

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

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



Итак, давайте начнем наше путешествие с изучения инструментов, которые мы собираемся использовать.

Шаг 1. Знакомство с инструментами

Чтобы продолжить эту операцию, мы в основном будем использовать два инструмента командной строки из Google Cloud, а именно:

  • gcloud. Интерфейс командной строки gcloud является основным инструментом командной строки для создания ресурсов Google Cloud и управления ими. Вы можете использовать этот инструмент для выполнения многих общих задач платформы из командной строки, сценариев и других средств автоматизации.
  • gsutil - gsutil - это приложение Python, которое позволяет получить доступ к облачному хранилищу из командной строки. Вы можете использовать gsutil для выполнения широкого круга задач по управлению корзинами и объектами.

Шаг 2: проекты

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

В примере используются следующие проекты: firestore-course-462bc и happy-todolist. Идентификаторы проекта будут важны при определении BUCKET. ВЕДРО ?? Успокойся, увидим позже.

Данные из исходной базы данных показаны ниже:

Шаг 3. Экспорт данных с помощью gcloud

Если на компьютере уже установлен gcloud, вам придется пройти аутентификацию, чтобы воспользоваться возможностями, которые предоставляет интерфейс командной строки. Для этого выполните команду:

gcloud auth login

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

gcloud config set project PROJECT_ID

Где PROJECT_ID - это идентификатор проекта Google Cloud, который совпадает с Firebase. В нашем случае мы разместим наш исходный проект, который в нашем случае gcloud config set project firestore-course-462bc

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

gcloud firestore export gs://[BUCKET]

В общем, ВЕДРО - это пространство в Хранилище, которое содержит ряд объектов, и в нем мы можем определять правила для доступа, совместного использования и т. Д.

В проекте Firebase есть сегмент, определенный следующим образом: PROJECT_ID.appspot.com. В нашем случае: firestore-course-462bc.appspot.com.

При выполнении указанной выше команды экспорт уже будет работать. Однако он будет незакрепленным в ведре, как показано на изображении ниже:

Идеально было бы организовать его в папке, которую мы можем назвать экспортированной. Наш ВЕДРО будет таким gs://firestore-course-462bc/exported. Наконец, наша команда для экспорта будет такой, как показано ниже:

gcloud firestore export gs://firestore-course-462bc.appspot.com/exported

Посмотрим снова на наше Хранилище:

ПРИМЕЧАНИЕ. Эта команда экспортирует всю базу данных. Если вам нужна конкретная коллекция, добавьте параметр collection-ids (например: - collection-ids = users, flowers).

Чтобы просмотреть сегмент, войдите в Google Cloud Console, выберите проект, в меню перейдите в Хранилище и войдите в сегмент проекта.

Загрузка данных из Bucket в машину

Здесь мы будем использовать инструмент gsutil. С его помощью мы загрузим данные, экспортированные из Firestore. Это нужно сделать для отправки в Хранилище целевого проекта.

С помощью команды gsutil cp мы можем копировать объекты из ведра на машину. Просто передайте адрес корзины и папку, в которой будут сохранены данные, как показано в приведенной ниже команде.

gsutil cp -r gs://firestore-course-462bc.appspot.com/exported ./

Флаг -r указывает на рекурсивную копию, используемую для извлечения файлов из папок и подпапок, то есть всего.

После выполнения команды в месте назначения (в нашем случае это местоположение терминала ./) будет создана папка с именем exported.

У нас есть дамп на нашей машине, теперь мы собираемся импортировать его в целевой проект.

Шаг 4. Импорт данных с помощью gcloud

Это время, когда, если целевой проект находится в другой учетной записи, вам нужно будет аутентифицироваться в целевой учетной записи с помощью команды gcloud auth login. В целевой учетной записи процесс будет таким же, как показано ниже.

Используя gsutil, мы отправим данные, загруженные на предыдущем шаге, в целевой проект. В нашем случае это проект happy-todolist, и команда будет похожа на показанную ниже:

gsutil cp -r ./exported gs://happy-todolist.appspot.com/exported

Команда по сути та же, только пути поменялись местами. Сначала локальный путь, а затем путь корзины.

После выполнения команды в целевом сегменте будет создана папка с именем экспортировано.

Это имя важно, потому что при экспорте оно определяется в файлах дампа. Что-то вроде exported.overralexportdata.

Теперь вернемся к использованию gcloud. На этот раз мы собираемся импортировать в целевой проект, и для этого нам нужно определить проект.

Затем с помощью команды gcloud config set project happy-todolist мы определим текущий проект.

После этого просто выполните импорт с помощью команды ниже.

gcloud firestore import gs://happy-todolist.appspot.com/exported

Помня, что то же самое и с экспортом. Если вы хотите импортировать конкретную коллекцию, используйте the--collection-idsoption.

Наша целевая база данных выглядит так:

Обратите внимание, что коллекция, которая уже существовала в базе данных, сохраняется.

Резюме

Вот и все, ребята. Помня об этих концепциях, вы сможете делать дамп и восстанавливать базу данных Cloud Firestore. Это даст вам возможность работать с резервными копиями и миграциями данных, когда это необходимо.

Пожалуйста, аплодируйте 👏👏 этот пост, если он был вам полезен. Спасибо за прочтение.

использованная литература