Ошибка загрузки BLOB-объекта в учетную запись хранилища из сельдерея в Docker-контейнере, запущенном в реестре Azure. - PullRequest
0 голосов
/ 27 июня 2019

Невозможно загрузить большой двоичный объект в Azure из задачи, выполняемой на работнике из сельдерея, в док-контейнере Azure (из реестра Azure).Возможность успешно загрузить большой двоичный объект с локального рабочего из сельдерея.

Я попытался решить проблему, изменив политику доступа в Azure на «Blob» или «Контейнер», однако это не помогло решить проблему.Выполнение задачи на локальном сельдерее завершается без ошибок со всеми уровнями доступа.Я убедился, что контейнер существует и правильно написан.

Код для загрузки BLOB-объекта:

block_blob_service = BlockBlobService(account_name='my_storage_account', 
account_key= 'my_storage_key')

directory_main = demo_data['username']
filename = '\demographics.json'

block_blob_service.create_blob_from_text('container_name', directory_main + 
filename, demo_json) 

При попытке загрузить через контейнер появляется следующее сообщение об ошибке:

AzureException ('Указанный ресурс не существует. ErrorCode: ResourceNotFound \ n

У запросов "Put" есть два различия:

Локальный:' User-Agent ':' Azure-Storage / 1.4.0-1.5.0 (Python CPython 3.7.3; Windows 10) '

Контейнер:' User-Agent ':' Azure-Storage / 1.4.0-1.5.0 (Python CPython 3.6.8;Linux 4.14.111-boot2docker) '

Кроме того, при локальном запуске создается заголовок «Авторизация», а при запуске из контейнера этот заголовок отсутствует. Любая помощь будет принята с благодарностью.

Traceback:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 385, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/app/factory.py", line 43, in __call__
    return self.run(*args, **kwargs)
  File "/app/tasks.py", line 158, in _download_task
    raise(e)
  File "/app/tasks.py", line 107, in _download_task
    block_blob_service.create_blob_from_text('my_container', directory_main + filename, demo_json)
  File "/usr/local/lib/python3.6/site-packages/azure/storage/blob/blockblobservice.py", line 846, in create_blob_from_text
    timeout=timeout)
  File "/usr/local/lib/python3.6/site-packages/azure/storage/blob/blockblobservice.py", line 751, in create_blob_from_bytes
    use_byte_buffer=True
  File "/usr/local/lib/python3.6/site-packages/azure/storage/blob/blockblobservice.py", line 582, in create_blob_from_stream
    timeout=timeout)
  File "/usr/local/lib/python3.6/site-packages/azure/storage/blob/blockblobservice.py", line 1101, in _put_blob
    return self._perform_request(request, _parse_base_properties)
  File "/usr/local/lib/python3.6/site-packages/azure/storage/common/storageclient.py", line 430, in _perform_request
    raise ex
  File "/usr/local/lib/python3.6/site-packages/azure/storage/common/storageclient.py", line 358, in _perform_request
    raise ex
  File "/usr/local/lib/python3.6/site-packages/azure/storage/common/storageclient.py", line 344, in _perform_request
    HTTPError(response.status, response.message, response.headers, response.body))
  File "/usr/local/lib/python3.6/site-packages/azure/storage/common/_error.py", line 115, in _http_error_handler
    raise ex
azure.common.AzureMissingResourceHttpError: The specified resource does not exist. ErrorCode: ResourceNotFound
<?xml version="1.0" encoding="utf-8"?><Error><Code>ResourceNotFound</Code><Message>The specified resource does not exist.
RequestId:46ba6512-301e-0061-2e62-2c37b7000000
Time:2019-06-26T21:03:00.0960002Z</Message></Error>

1 Ответ

0 голосов
/ 28 июня 2019

По моему опыту, в вашем сценарии есть две возможные ошибки.

  1. Если контейнер container_name не существует в вашей учетной записи хранения, вам необходимо сначала позвонить create_container, прежде чем create_blob_from_text. Если она существует, функция create_container не будет иметь никаких негативных последствий для вашей работы.

    block_blob_service.create_container('container_name')
    block_blob_service.create_blob_from_text('container_name', directory_main + 
    

    имя файла, demo_json)

  2. Пожалуйста, обратитесь к официальному документу Naming and Referencing Containers, Blobs, and Metadata, если вы хотите установить некоторые виртуальные каталоги для своего большого двоичного объекта, правильный способ - использовать /, а не \. Так как код ниже.

    directory_main = demo_data['username']
    filename = '/demographics.json' # not '\demographics.json'
    

Надеюсь, это поможет.

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