Как вызвать функцию Azure, которая работает на localhost и возвращает 500 на портале Azure?

#python #azure-functions

#python #azure-функции

Вопрос:

У меня есть функция Azure, созданная в VSCode с помощью Python. API содержит доступ к AzureWebJob, когда я тестировал его на локальном хосте http://localhost:7071/api/FUNCTIONNAME ?Param1=value1 ответ равен 200, и возврат JSON в порядке, но при развертывании функции в Azure ссылкаhttps://APPSERVICENAME.azurewebsites.net/api/FUNCTIONNAME?code=APICODE==amp;Param1=value1 Ошибка внутреннего сервера с возвратом 500.

Я использую Postman для тестирования и ответил на запрос в Chrome.

Используемый код:

 import logging
import azure.functions as func
from io import StringIO
import pandas as pd
from datetime import datetime as dt
import json

#filter the dataframe
def filter(pdf, keys, daterange):
  jkeys=[]
  for key in keys:
    #filter by numeric key
    if(reg.isdigit()):
      jkeys.append(int(key))
  #filtering by two types of keys
  pdfA=pdf[pdf['key'].isin(keys)]
  pdfS=pdf[pdf['numerickey'].isin(jkeys)]
  #concat the DFs
  pdf=pd.concat([pdfS,pdfA],axis=0)
  #Filtering by a dateRange or single date
  if(daterange.isdigit()): 
    pdf=pdf[pdf['Day']==int(daterange)]
    return pdf
  else:
    #getting the two dates
    date=daterange.split('-')
    #filtering the rows
    pdf=pdf[(pdf['Day']>=int(date[0])) amp; (pdf['Day']<=int(date[1]))]
    return pdf

# function to validate the params
def param_validation(param: str,
                    param_name: str,
                    req: func.HttpRequest) -> str:
                    
    if not param:
        try:
            req_body = req.get_json()
        except ValueError:

            if param != None and '-' in param:
                return func.HttpResponse(
                    "Set a date in the query",
                    status_code=400
                )
        else:
            param = req_body.get(param_name)
            return param
    else:
        return param

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

    #get the params
    daterange = req.params.get('daterange')
    keys = req.params.get('keys')
    name=req.params.get('name')

    daterange = param_validation(daterange, 'daterange', req)
    keys = param_validation(keys, 'keys', req)

    #this condition is included just to test fast if works 
    if name:
        return func.HttpResponse(f"Hello {name}!")
    #This is to get the real data request function
    if daterange and (keys):
        try:
            
            if daterange and keys:
                # get the data from a csv in the datalake 
                data = pd.read_csv(StringIO(inputBlob.read().decode('utf-8')))
                keys=keys.split(',')  
                dfFilt=filter(data,keys,daterange).fillna(0)

                return func.HttpResponse(f"{json.dumps(dfFilt.to_dict(orient='record'))}")

            else:
                return func.HttpResponse(
                    "insert a valid daterange to the query",
                    status_code=400
            )
        except:
                return func.HttpResponse(
                    "Params are wrong.",
                    status_code=500
            )
    else:
            return func.HttpResponse(
                "Params missed",
                status_code=400
            )
          
  

Цель состоит в том, чтобы получить csv из datalake и вернуть строки, отфильтрованные по предоставленным 2 аргументам.

Я нашел больше информации об ошибке, платформа возвращает 137 кода python. Я развернул последний функциональный API с устаревшим csv (который легче, 60 МБ), и API работает хорошо. Но когда я устанавливаю новый csv (300 МБ), api начинает возвращать внутреннюю ошибку сервера code 500.

Я думаю, что это просто проблема с памятью, потому что на локальном хосте работает отлично.

есть ли другой способ получить данные из datalake, фильтруя два столбца с помощью функции Azure? Или это возможно для устранения этой проблемы с памятью?

Спасибо!

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

1. Код API? Вы даете ей ключ?

2. Привет, есть какие-нибудь обновления?

3. Да, я добавил ошибку python и реализовал код.

Ответ №1:

Эта проблема может быть вызвана многими причинами, поэтому, пожалуйста, покажите более подробную информацию. С моей стороны, это не проблема.

1, код параметра должен быть ключом вашей функции (если он не анонимный.)

2, пожалуйста, проверьте свой код, возможно, вы используете что-то, чего не существует.(Поэтому, пожалуйста, покажите свой код и другие файлы.)

Вы можете использовать Application Insights для проверки ошибки details или напрямую перейти к просмотру файлов журнала:

Перейдите к https://yourfunctionappname.scm.azurewebsites.net/DebugConsole , а затем нажмите на LogFilesApplicationFunctionsFunctionHttpTrigger1> , вы найдете там файлы журнала, щелкните и проверьте ошибку.

Пожалуйста, дайте мне знать о любых обновлениях.

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

1. Я обновил информацию об ошибке! Если вы знаете, как это решить, пожалуйста, дайте мне знать. Я продолжаю работать над этим, если я нашел способ решить это. Я опубликую решение.