Я пытаюсь перенести данные из нашего проекта firebase dev в наш тестовый проект firebase, используя gcloud
cli. Для выполнения этой задачи я создал следующий скрипт.
#!/bin/bash
SRC_PROJECT=$1
SRC_ACCOUNT="importexport@$SRC_PROJECT.iam.gserviceaccount.com"
SRC_CREDENTIALS=/home/$SRC_PROJECT.json
DEST_PROJECT=$2
DEST_ACCOUNT="importexport@$DEST_PROJECT.iam.gserviceaccount.com"
DEST_CREDENTIALS=/home/$DEST_PROJECT.json
GCLOUD_STORAGE=$3
echo "-------------------------------------------"
echo " Activate Service Account $SRC_PROJECT"
echo "-------------------------------------------"
gcloud --quiet config set project ${SRC_PROJECT}
gcloud beta auth activate-service-account ${SRC_ACCOUNT} --key-file=${SRC_CREDENTIALS}
echo "-------------------------------------------"
echo " Exporting $SRC_PROJECT"
echo "-------------------------------------------"
gcloud beta firestore export $GCLOUD_STORAGE > ./meta.txt
echo "-------------------------------------------"
echo " Activate Service Account $DEST_PROJECT"
echo "-------------------------------------------"
gcloud --quiet config set project ${DEST_PROJECT}
gcloud beta auth activate-service-account ${DEST_ACCOUNT} --key-file=${DEST_CREDENTIALS}
echo "-------------------------------------------"
echo "Importing $DEST_PROJECT $(grep -o 'gs://.*$' ./meta.txt)"
echo "-------------------------------------------"
gcloud beta firestore import $(grep -o 'gs://.*$' ./meta.txt)
В этом сценарии предполагается, что у вас есть файлы учетных данных, расположенные в /home
, которые соответствуют соглашению об именах <project_id>.json
. Далее предполагается, что учетная запись службы была создана как для исходного проекта, так и для проекта dest, который следует соглашению об именах importexport@<project_id>.iam.gserviceaccount.com
.
Запуск сценария так же прост, как выполнение следующего ...
%> ./migrate.sh dev-project-id test-project-id google-storage
Я гарантировал, что учетные записи служб имеют разрешения для одного и того же GCLOUD_STORAGE. И все же я все еще получаю следующую ошибку:
ОШИБКА: (gcloud.beta.firestore.import) PERMISSION_DENIED: вызывающая сторона не имеет разрешения
Кто-нибудь еще пытался сделать что-то подобное? Есть идеи, почему у меня все еще есть разрешение?
Вот разрешения, которые я назначил обеим учетным записям, и обе учетные записи добавляются в качестве элементов в хранилище друг друга.
- Cloud Datastore Импорт Экспорт Администратор
- Владелец облачного хранилища данных
- Редактор облачных хранилищ файлов
- Администратор Firebase
- Владелец
- Администратор хранилища