Serverless Framework: вызывает локальную функцию Python медленно реагирует - PullRequest
0 голосов
/ 21 октября 2018

Попытка локально запустить мои лямбда-функции без сервера Python, используя:

Безсерверный локальный вызов -f привет

Функция запускается, но, похоже, она занимает 2-5секунд до вызова обработчика.Это реальная проблема для меня, так как я надеюсь использовать invoke для поддержки локального тестирования.

Мой обработчик очень прост:

def hello(event, context):
   print('start')
   body = {
      "message": "Go Serverless v1.0! Your function executed successfully!",
      "input": event
   }

   response = {
      "statusCode": 200,
     "body": json.dumps(body)
   }
   print('end')

   return response

Грубые тайминги:

  • вызов invoke на print(start): 2-5 с
  • print(start) на print(end): <0,5 с </li>
  • print(end) на ответ, возвращающийся на терминал: 1 с

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

Без сервера: 1.32 (установлен глобально) Python: 3.6.5

1 Ответ

0 голосов
/ 30 октября 2018

Это проблема с серверной платформой (слишком печально для AWS SAM Framework), а не с вашим кодом.К сожалению, локальные вызовы Node.JS и Go страдают от одной и той же проблемы.

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

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

Редактировать:

Это в основном то, что вам нужно сделать, чтобы создать оболочку:

  1. Раскрутите ваш HTTP-сервер из вашей оболочки.
  2. Создайте функцию, которая преобразует ваш запрос на сервере в лямбда-запросы, и ту, которая преобразует ответ, возвращаемый из вашего лямбда-обработчика, вваш ответ HTTP-сервера.
  3. В вашей оболочке создайте конечные точки пути, соответствующие путям, указанным в serverless.yml.Используйте функции, созданные на шаге 2, для пересылки запроса вашему обработчику.
  4. Получив возвращенный результат от вашего обработчика, сопоставьте его с ответом вашего HTTP-сервера и отправьте пользователю в качестве ответа.
...