Чтение ведра из другого проекта в облаке - PullRequest
0 голосов
/ 17 марта 2019

Поскольку у Firestore нет способа клонировать проекты, я пытаюсь получить эквивалент, копируя данные из одного проекта в корзину GCS и считывая их в другой проект.

В частности, используя облачную оболочку, я заполняюкорзина с данными, экспортированными из проекта Firestore A, и я пытаюсь импортировать их в проект Firestore B. корзина принадлежит проекту Firestore A.

Я могу экспортировать данные из проекта Firestore A без каких-либо проблем.Когда я пытаюсь импортировать в проект Firestore B с помощью команды cloudhell ​​

gcloud beta firestore import gs://bucketname

, я получаю сообщение об ошибке

project-b@appspot.gserviceaccount.com does not have storage.
buckets.get access to bucketname

Я искал высоко и низко способ предоставления прав доступаstorage.bucket.get для проекта B, но я не нахожу ничего, что работает.

Может кто-нибудь указать мне, как это делается?Я полдюжины раз просматривал документы Google и либо не нахожу нужную информацию, либо не понимаю информацию, которую нахожу.

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Мне не удалось заставить команды, предоставленные "sotis", работать, однако его ответ определенно заставил меня пойти по правильному пути.Команды, которые в конечном итоге сработали для меня, были:

    gcloud config set project [SOURCE_PROJECT_ID]
    gcloud beta firestore export gs://[BUCKET_NAME]

    gcloud config set project [TARGET_PROJECT_ID]    
    gsutil acl ch -u [RIGHTS_RECIPIENT]:R gs://[BUCKET_NAME]
    gcloud beta firestore import gs://[BUCKET_NAME]/[TIMESTAMPED_DIRECTORY]

Где:

* SOURCE_PROJECT_ID = the name of the project you are cloning
* TARGET_PROJECT_ID = the destination project for the cloning
* RIGHTS_RECIPIENT = the email address of the account to receive read rights
* BUCKET_NAME = the name of the bucket that stores the data.  
      Please note, you have to manually create this bucket before you export to it.  
      Also, make sure the bucket is in the same geographic region as the projects you are working with.
* TIMESTAMPED_DIRECTORY = the name of the data directory automatically created by the "export" command

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

0 голосов
/ 18 марта 2019

Для импорта из проекта A в проекте B учетная запись службы в проекте B должна иметь необходимые разрешения для хранилища Cloud Storage в проекте A.

В вашем случае учетная запись службы:

  • project-ID@appspot.gserviceaccount.com

Чтобы предоставить необходимые разрешения, вы можете использовать эту команду в облачной оболочке проекта B:

gsutil acl ch -u project-ID@appspot.gserviceaccount.com:OWNER gs://[BUCKET_NAME]
gsutil -m acl ch -r -u project-ID@appspot.gserviceaccount.com:OWNER gs://[BUCKET_NAME]

Затем вы можете импортировать с помощью import firestore :

gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]
...