Разрешить экземпляру Google Cloud Compute Engine записывать файл в Google Storage Bucket - Python - PullRequest
1 голос
/ 20 апреля 2019

В моем скрипте Python Server, который выполняется на экземпляре виртуальной машины Google, он пытается сохранить изображение (jpeg) в хранилище. Но выдает следующую ошибку.

Файл "/home/thamindudj_16/server/object_detection/object_detector.py", линия 109, обнаружение рук new_img.save ( "slicedhand / {} # sliced_image {}. JPEG" .format (threadname, я)) Файл

"/ дом / thamindudj_16 / .local / Библиотека / python3.5 / сайт-пакеты / PIL / Image.py", линия 2004, в сохранении fp = builtins.open (имя файла, "w + b")

OSError: [Errno 5] Ошибка ввода / вывода: 'slicedhand / thread_1 # sliced_image0.jpeg'

Все файлы, включая скрипты Python, находятся в хранилище Google и подключены к экземпляру виртуальной машины с помощью gcsfuse . Приложение пытается сохранить новое изображение в папке slicedhand .

Фрагмент кода Python, в котором происходит сохранение изображения.

from PIL import Image

...
...

i = 0
new_img = Image.fromarray(bounding_box_img)      ## conversion to an image
new_img.save("slicedhand/{}#sliced_image{}.jpeg".format(threadname, i))

Думаю, проблема в разрешении доступа. Док говорит использовать --key_file. Но какой файл ключа я должен использовать и где я могу его найти. Мне не ясно, в этом ли проблема или что-то еще.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 23 апреля 2019

Я понимаю, что вы используете gcfuse на своем экземпляре виртуальной машины Linux для доступа к Google Cloud Storage.

Файл ключа - это ключ учетных данных учетной записи службы, который позволяет инициировать Cloud SDK или клиентскую библиотеку в качестве другой учетной записи службы. Вы можете загрузить файл ключа из Cloud Console . Однако, если вы используете виртуальный экземпляр, вы автоматически используете учетную запись службы Compute Engine по умолчанию. Вы можете проверить это, используя консольную команду: $ gcloud init.

Чтобы правильно настроить свои учетные данные, следуйте документации .

Учетная запись службы вычислений по умолчанию для Compute Engine, должна быть включена Область доступа Хранилище> Полный . Access Scope - это механизм, который ограничивает уровень доступа к облачным API. Это можно сделать во время создания машины или при остановке инстанса виртуальной машины.

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

Облачное хранилище Имена объектов имеют требования . Настоятельно рекомендуется избегать использования хеш-символа "#" в именах объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...