Невозможно выполнить резервное копирование хранилища данных GAE в ведро GS
Я пытаюсь выполнить резервное копирование хранилища данных GAE в ведро GS, как описано здесь: https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Backup_And_Restore. Я попытался указать имя ведра в форме:
bucket
/gs/bucket
/gs/bucket/path
но не работает.
Каждый раз, когда я получаю сообщение:
There was a problem kicking some off the jobs/tasks:
Invalid bucket name: 'bucket'
Что я делаю неправильно? Возможно ли вообще резервное копирование всех данных (в том числе блочных файлов) на GS без написания специального кода для этого?
Ответы
Ответ 1
Я получил его для работы, добавив электронную почту учетной записи службы в качестве привилегированного пользователя с разрешением на запись.
Вот что я сделал:
- Создайте ведро через веб-интерфейс (STORAGE > CLOUD STORAGE > Storage Browser > New Bucket)
- Добавить [email protected] в качестве привилегированного пользователя с разрешением на редактирование (Разрешения > Добавить участника)
Даже подумал, что это часть одного и того же проекта, по какой-то причине мне все еще приходилось добавлять электронную почту проекта в качестве привилегированного пользователя.
Ответ 2
Я подозреваю, что ведро не существует, иначе у приложения нет права на запись в ведро.
Убедитесь, что верно следующее:
- Вы создали
BUCKET
. Используйте что-то вроде gsutil, чтобы создать ведро, если это необходимо.
- Убедитесь, что учетная запись службы движка вашего приложения имеет WRITE-доступ к
BUCKET
.
- Теперь запустите резервную копию, используя форму
/gs/BUCKET
Если вы получили сообщение Bucket "/gs/BUCKET" is not accessible
, то ваше ведро не существует, или [email protected]
не имеет доступа к вашему ведру.
ПРИМЕЧАНИЕ: форма /gs/BUCKET
. Неправильно: BUCKET, gs://BUCKET, gs/BUCKET и т.д.
Убедитесь, что ведро существует с правильными разрешениями с помощью следующей команды:
gsutil getacl gs://BUCKET # Note the URI form here instead of a path.
Найдите запись, как показано ниже:
<Entry>
<Scope type="UserByEmail">
<EmailAddress>[email protected]</EmailAddress>
</Scope>
<Permission>WRITE</Permission>
</Entry>
Если вы его не видите, вы можете добавить его следующим образом:
gsutil getacl gs://BUCKET > acl.xml
vim acl.xml # Or your favorite editor
# Add the xml above
gsutil setacl acl.xml gs://BUCKET
Теперь сделанные шаги будут работать.
Ответ 3
Я просто провел время, борясь с этим сам. Спасибо @fejta за вашу помощь.
Я не мог понять этого. Я добавил моего пользователя в проект, подтвердил, что могу писать, вручную обновлял ACL (который не должен был требоваться),...
В конце концов, создав ведро из командной строки с помощью:
gsutil mb gs://BUCKET
вместо веб-пользовательского интерфейса работал у меня. Несколько ковшей, созданных до или после добавления пользователя в команду, приводили к "Недопустимое имя ковша"
Я обратился к нему с помощью:
/gs/BUCKET
Надеюсь, это поможет,
Jacob
Ответ 4
Обязательно следуйте инструкциям здесь:
https://cloud.google.com/appengine/docs/standard/python/console/datastore-backing-up-restoring#restoring_data_to_another_app
Что нужно сделать:
- добавить ACL-разрешение в целевое приложение
- Если резервная копия уже создана перед добавлением разрешения на ведро, найдите резервную копию и добавьте разрешение
- добавить [PROJECT_ID] @appspot.gserviceaccount.com в качестве члена вашего исходного приложения с ролью редактора
- путь для импорта в исходное приложение:/gs/bucket