Отладка лямбда-функций Python в VSCode

#python #visual-studio-code #aws-lambda #aws-toolkit

Вопрос:

Я успешно использую инструментарий AWS для отладки node.js лямбда функционирует уже пару лет. Для моего последнего проекта я хотел написать свои лямбда — функции на python. Я следовал инструкциям в приведенном ниже руководстве.

https://codeolives.com/2020/01/02/vs-code-with-python-aws-lambda-a-complete-tutorial-to-develop-and-deploy-python-lambda-functions-using-vs-code-part-2/

Этот учебник действительно кажется идентичным тому, что я делал для отладки node.js. Однако, когда я нажимаю «выполнить и отладить», я получаю эту ошибку.

2021-10-08 17:04:00 [ИНФОРМАЦИЯ]: Запущен PythonPipBuilder:Разрешенные зависимости

2021-10-08 17:04:03 [ИНФОРМАЦИЯ]: Сбой сборки

2021-10-08 17:04:04 [ИНФОРМАЦИЯ]: Ошибка: PythonPipBuilder:Разрешенные зависимости — {debugpy==1.5.0(колесо)}

2021-10-08 17:04:04 [ПРЕДУПРЕЖДЕНИЕ]: «сборка сэма» не удалась: C:/path_to_user/AppData/Local/Temp/aws-toolkit-vscode/vsctkYP3zOS/app___vsctk___template.yaml

Очевидно, это говорит о том, что он не может разрешить debugpy, но я только начинаю использовать python, и я не уверен, что это такое или как это решить. Поиск в Google не выявил ничего, что решило бы проблему. Если бы кто-нибудь мог просветить меня, я был бы очень признателен

Ответ №1:

Одним из самых больших преимуществ Python является то, что функции lambda_handler-это просто еще одна функция в файле python. Вы можете использовать Pytest и тому подобное для модульного тестирования фактического обработчика, как и любой другой функции, не беспокоясь о настройке Docker/SAM для лямбды.

Так вот, это не идеально. Издеваться над объектом контекста может быть сложно, если вы вообще полагаетесь на него (если это не так, передача пустого диктатора {} второму параметру просто прекрасна), и, очевидно, это не совсем та же среда. Импорт может быть разным, а также ведение журнала может быть странным.

Если у вас уже есть СЭМ и Докер, библиотека насмешек moto может помочь в этом, хотя она также не идеальна (и, честно говоря, больше подходит для насмешливых лямбда-вызовов из других функций, чем для насмешек над фактической лямбдой).

Что касается вашей фактической ошибки и вопроса...

Попробуйте удалить ==X. X. X из вашего requirements.txt и пусть pip попытается получить последнюю версию — я знаю, что это не замечательно, но это даст вам знать, если у этой потенциальной библиотеки по какой-то причине возникнут проблемы с установкой pip в контейнер docker.

Если это сработает, то, скорее всего, проблема с подключением между вашей настройкой docker и pypy — возможно, вам придется изменить данные подключения pip, чтобы знать, где искать или искать где-то конкретно.