Функции Azure, запущенные из VS Code, выдают ошибку ssl

#python #ssl #visual-studio-code #azure-functions

#python #ssl #visual-studio-code #azure-функции

Вопрос:

Я создал функцию Azure — HTTP-триггер в VS Code, но я столкнулся с ошибкой, связанной с SSL. В качестве резюме я хотел бы, чтобы функция считывала файл csv из одного контейнера для хранения больших двоичных объектов (работает), а затем генерировала другой файл .txt и загружала его в другой контейнер для хранения больших двоичных объектов (похоже, эта часть генерирует ошибку ssl). Похоже, не удается найти корень проблемы, у кого-нибудь есть идея о том, как к ней подойти?

Код Python:

 import pandas as pd
from datetime import datetime, timedelta
import logging
import azure.functions as func
from azure.storage.blob import BlobServiceClient, generate_container_sas, ContainerSasPermissions, generate_blob_sas, BlobSasPermissions, ContainerClient
from azure.core.exceptions import HttpResponseError, ResourceExistsError
import time
import os
import uuid

# using generate_container_sas
def get_img_url_with_container_sas_token(account_name,container_name,account_key):
    container_sas_token = generate_container_sas(
        account_name=account_name,
        container_name=container_name,
        account_key=account_key,
        permission=ContainerSasPermissions(read=True),
        expiry=datetime.utcnow()   timedelta(hours=1)
    )
    return container_sas_token

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = "xxxxx"
    key =  "xxxxx"
    raw_container = "raw"
    blob_name = 'employee.csv'

    gen_token = get_img_url_with_container_sas_token(name,raw_container,key)
    INPUTSTORAGEACCOUNTURLSAS = f"https://{name}.blob.core.windows.net/{raw_container}/{blob_name}?{gen_token}"

    #df = pd.read_csv(INPUTSTORAGEACCOUNTURLSAS,delimiter=',')

    connect_str ='xxxxx'
    # Create a file in local data directory to upload and download 
    local_file_name = "quickstart"   str(uuid.uuid4())   ".txt"
    upload_file_path = "xxxxx"   local_file_name

    # Write text to the file
    file = open(upload_file_path, 'w')
    file.write("Hello, World!")
    file.close()

    container_name = 'proccessed'
   # Create a blob client using the local file name as the name for the blob
    blob_service_client = BlobServiceClient.from_connection_string(connect_str)
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)

    print("nUploading to Azure Storage as blob:nt"   local_file_name)

    # Upload the created file
    with open(upload_file_path, "rb") as data: 
        #print(data)
        blob_client.upload_blob(data) 

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )
 

Ошибка привела:

 Executed 'Functions.ecr_xml_to_dl' (Failed, Id=7190b60c-4f2c-4c14-ad3c-b76735405953, Duration=96214ms)
[2020-12-07T12:27:42.443Z] System.Private.CoreLib: Exception while executing function: Functions.ecr_xml_to_dl. System.Private.CoreLib: Result: Failure
Exception: ServiceRequestError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:852)
Stack:   File "C:Program FilesMicrosoftAzure Functions Core Toolsworkerspython3.6/WINDOWS/X64azure_functions_workerdispatcher.py", line 349, in _handle__invocation_request
    self.__run_sync_func, invocation_id, fi.func, args)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libconcurrentfuturesthread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "C:Program FilesMicrosoftAzure Functions Core Toolsworkerspython3.6/WINDOWS/X64azure_functions_workerdispatcher.py", line 511, in __run_sync_func
    return func(**params)
  File "C:UsersUSERDocumentsWorkCodingAzure_Test_Functionecr_xml_to_dl__init__.py", line 58, in main
    blob_client.upload_blob(data)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecoretracingdecorator.py", line 83, in wrapper_use_tracer
    return func(*args, **kwargs)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_blob_client.py", line 539, in upload_blob
    return upload_block_blob(**options)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_upload_helpers.py", line 106, in upload_block_blob
    **kwargs)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_generatedoperations_block_blob_operations.py", line 217, in upload
    pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 211, in run
    return first_node.send(pipeline_request)  # type: ignore
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  [Previous line repeated 2 more times]
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipelinepolicies_redirect.py", line 157, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedpolicies.py", line 515, in send
    raise err
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedpolicies.py", line 489, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  [Previous line repeated 1 more time]
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedpolicies.py", line 290, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
    response = self.next.send(request)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 103, in send
    self._sender.send(request.http_request, **request.context.options),
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedbase_client.py", line 319, in send
    return self._transport.send(request, **kwargs)
  File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipelinetransport_requests_basic.py", line 285, in send
    raise error
 

Комментарии:

1. Могу ли я узнать , в какой строке кода отображается сообщение об ошибке?

2. Если в сообщении об ошибке не отображается номер строки, пожалуйста, добавьте logging.info("111") , logging.info("222") … между каждой строкой, чтобы проверить, какая строка кода вызывает ошибку.

3. Привет, Шен, я обновил вопрос с полным сообщением об ошибке, спасибо!

4. Привет, это upload_file_path похоже C:\xxx\xxx\filename.txt ? Или upload_file_path включает http/https в него?

5. @HuryShen путь к upload_file_path выглядит так C:\xxx\xxx\filename.txt

Ответ №1:

Согласно некоторым тестам, кажется, что ваш код не представляет проблем, код отлично работает на моей стороне.

Что касается сообщения об ошибке, которое вы предоставили, то, похоже, оно было вызвано вашим подключением к Интернету. Если ваш компьютер использует прокси-сервер для подключения к Интернету, он может показать аналогичную проблему. Поэтому, пожалуйста, проверьте, использует ли ваша сеть какой-либо прокси-сервер или открыт ли fiddler на вашем компьютере. И, пожалуйста, замените другой компьютер с общедоступным Интернетом для тестирования с тем же кодом.

Комментарии:

1. Привет, вы правы, проблема была вызвана прокси-сервером. Теперь я решил ее, спасибо!

2. @PyRar Отлично, не могли бы вы отметить мой ответ как «принятый», спасибо.