У меня есть функция python azure, которая запускает сообщение очереди и загружает json в хранилище BLOB-объектов. Я получаю ошибки аутентификации на blob.client с использованием URL-адреса SAS учетной записи хранения и токена SAS, а также строки подключения учетной записи хранения
код функции: символ #, используемый при переключении между экземплярами blobclients
import json
import requests
import azure.functions as func
from azure.storage.blob import BlobClient
def main(msg: func.QueueMessage) -> None:
queuedata = msg.get_body().decode('utf-8')
data = json.loads(queuedata)
url = data['data']['url']
r = requests.get(url)
data = r.text
s1, s2 = (data.split(sep=';', maxsplit=1))
s1 = ''.join(s1.split())
dict1 = json.loads(s1)
dict1 = json.loads(s2)
mergedJson = {**dict1, **dict1}
#connectionstring = "DefaultEndpointsProtocol=https;AccountName=XXXXXX;AccountKey=XXXXXXXX/Jm4OPgSzWOju5hD/+XA4QXXXXXXfNEbUxuO9WoUQ7xn91cE3qlQeqRoHJx3SrJ+bdln9Q==;EndpointSuffix=core.windows.net"
sas_url = 'https://XXXXX.blob.core.windows.net/?sv=2019-10-10&ss=bq&srt=c&sp=rwdlacupx&se=2020-06-13T04:48:27Z&st=2020-06-12T20:48:27Z&spr=https&sig=1j2a6pQUFLI1B71D8oRoALHYgpF82pMiXbvrdZCY7gk%3D'
sas_token = '?sv=XXXXXXXXXX-10-10&ss=XXXXX&XXX=c&sp=rwdlacupx&se=2020-06-13T04:48:27Z&st=2020-06-12T20:48:27Z&spr=https&sig=1j2a6pQUFLI1B71D8oRoALHYgpF82pMiXbvrdZCY7gk%3D'
filename = dictA['FormId'] + '.json'
#blob_client = BlobClient.from_connection_string(conn_str= connectionstring, container_name='json', content_type='application/json', blob_name= filename)
#blob_client.upload_blob(mergedJson, blob_type='BlockBlob')
blob_client2 = BlobClient(account_url= sas_url, credential= sas_token, container_name='json', blob_name= filename, content_type='application/json')
blob_client2.upload_blob(mergedJson, blob_type='BlockBlob')
При ошибке строки подключения с использованием BlobClient.from_connection_string (conn_str, container_name, blob_name, snapshot = None, credential = None, ** kwargs):
Результат: Ошибка. Исключение: ClientAuthenticationError: серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись. RequestId: cdccbb2e-e01e-0007-6cfd-40c024000000 Время: 2020-06-12T21: 09: 22.1504720Z ErrorCode: AuthenticationFailed Ошибка: нет AuthenticationErrorDetail: MAC-подпись, найденная в HTTP-запросе 'n + oKBbFHSn12Nhw3SIGLax3Ox, не такая же, как' любая вычисленная подпись. Сервер использовал следующую строку для подписи: 'PUT 302 application / octet-stream * x-ms-blob-type: BlockBlob x-ms-client-request-id: fcba350c-acf0-11ea-b094-0242ac100105 x-ms-date: Пт, 12 июн 2020 21:09:22 GMT x-ms-version: 2019-07-07 /dmgenhwr/json/C1234567.json '. Стек: файл «/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py», строка 315, в _handle__invocation_request self. run_sync_func, invocation_id, fi.func, args) File » /usr/local/lib/python3.7/concurrent/futures/thread.py ", строка 57, результат выполнения = self.fn (* self.args, ** self.kwargs) Файл" / azure-functions-host /workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py ", строка 434, в __run_sync_func return func (** params) File" / home / site / wwwroot / TextQueue / __ init .py ", строка 32 в основном файле blob_client.upload_blob (mergedJson, blob_type = 'BlockBlob') File "/home/site/wwwroot/.python_packages/lib/site-packages/azure/core/tracing/decorator.py", строка 83, в wrapper_use_tracer return func (* args, ** kwargs) Файл "/home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_blob_client.py", строка 496, в upload_blob return upload_block_blob (** options) Файл "/home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_uploa d_helpers.py ", строка 153, в файле upload_block_blob process_storage_error (error)" /home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_shared/response_handlers.py ", строка 147_error_storage поднять ошибку
при ошибке URL-адреса SAS и токена SAS с использованием BlobClient (account_url, container_name, blob_name, snapshot = None, credential = None, ** kwargs):
Результат: исключение сбоя: HttpResponseError: этот запрос не авторизован для выполнения этой операции с использованием этого типа ресурса. RequestId: 62bb329f-b01e-0036-19fb-409bf3000000 Время: 2020-06-12T20: 56: 14.5723115Z ErrorCode: AuthorizationResourceTypeMismatch Ошибка: нет Стек: файл "/azure-functions-host/workers/python/3.7/LINUX/X64/ azure_functions_worker / dispatcher.py ", строка 315, в _handle__invocation_request self. run_sync_func, invocation_id, fi.func, args) Файл" /usr/local/lib/python3.7/concurrent/futures/thread.py ", строка 57, при запуске result = self.fn (* self.args, ** self.kwargs) Файл "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", строка 434, в __run_sync_func return func (** params) File "/ home / site / wwwroot / TextQueue / __ init .py", строка 35, в основном файле blob_client2.upload_blob (mergedJson, blob_type = 'BlockBlob') File "/ home /site/wwwroot/.python_packages/lib/site-packages/azure/core/tracing/decorator.py ", строка 83, в wrapper_use_tracer return func (* args, ** kwargs) File" / home / site / wwwroot /. python_packages / lib / site-packages / azure / storage / blob / _blob_client.py ", строка 496, в upload_blob return upload_block_blob (** options) File "/home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_upload_helpers.py", строка 153, в файле upload_block_blob process_storage_error (error) File " home / site / wwwroot / .python_packages / lib / site-packages / azure / storage / blob / _shared / response_handlers.py ", строка 147, ошибка вызова process_storage_error
Я сослался на класс Azure Storage BlobClient
Требуется ли для этой функции метод действия Http для PUT? Я не вижу ссылки в лазурном SDK для python. Любое руководство приветствуется.