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-ids
option.
Наша целевая база данных выглядит так:
Обратите внимание, что коллекция, которая уже существовала в базе данных, сохраняется.
Резюме
Вот и все, ребята. Помня об этих концепциях, вы сможете делать дамп и восстанавливать базу данных Cloud Firestore. Это даст вам возможность работать с резервными копиями и миграциями данных, когда это необходимо.
Пожалуйста, аплодируйте 👏👏 этот пост, если он был вам полезен. Спасибо за прочтение.
использованная литература
- Мой канал на YouTube - https://youtube.com/edigleyssonsilva
- Мой Github - https://github.com/geeksilva97
- Документы Firebase - https://firebase.google.com/docs/firestore/manage-data/export-import
- Планирование экспорта и периодического резервного копирования - https://firebase.google.com/docs/firestore/solutions/schedule-export
- Значок на большом пальце был создан https://www.flaticon.com/authors/ultimatearm