Как добавить библиотеки python в функцию AWS лямбда для Alexa?
Я следил за учебником по созданию приложения Alexa с помощью Python:
Учебник Python Alexa
Мне удалось успешно выполнить все шаги и заставить приложение работать. Теперь я хочу изменить код python и использовать внешние библиотеки, такие как import requests
или любые другие библиотеки, которые я устанавливаю с помощью pip. Как настроить мою лямбда-функцию для включения любых пакетов пакетов, которые я устанавливаю локально на своей машине?
Ответы
Ответ 1
Как описано в официальной документации Amazon link здесь Это так же просто, как просто создание zip всех содержимого папки после установки требуемые пакеты в вашей папке, где у вас есть ваш лямбда-код на python.
Как отметил Vineeth в своем комментарии, самый первый шаг в переходе от встроенного редактора кода к подходу к загрузке zip файла - это изменить имя обработчика функции лямбда в настройках конфигурации, чтобы включить имя файла python script, которое содержит лямбда-обработчик.
lambda_handler = > {your-python- script -file-name}.lambda_handler.
![CONFIGURE LAMBDA FUNCTION]()
Другие решения, такие как python-lambda и lambda-uploader помощь в упрощении процесса загрузки и, самое главное, ЛОКАЛЬНОГО ТЕСТИРОВАНИЯ. Это сэкономит много времени на разработке.
Ответ 2
Официальная документация довольно хороша. В двух словах вам нужно создать zip файл каталога, содержащего как код вашей лямбда-функции, так и все внешние библиотеки, которые вы используете на верхнем уровне.
Вы можете имитировать это, отключив виртуальный диск, скопировав все необходимые библиотеки в рабочий каталог (который всегда находится в sys.path
, если вы вызываете script в командной строке) и проверяете, сохраняется ли ваш script работы.
Ответ 3
Возможно, вам захочется ознакомиться с такими фреймворками, как zappa, который будет обрабатывать упаковку и развертывание функции лямбда для вас.
Вы можете использовать это в сочетании с flask-ask, чтобы легче было сделать навыки Alexa. Там даже видеоуроки этого (из zappa readme) здесь
Ответ 4
Echoing @d3ming answer, основа - хороший способ пойти в этот момент. Создание пакета развертывания вручную не является невозможным, но вам нужно будет загружать скомпилированный код вашего пакета, и если вы компилируете этот код в системе, отличной от linux, вероятность столкнуться с проблемами с различиями между вашей системой и среда с развернутой функцией Lambda высока.
Затем вы можете обойти это, скомпилировав свой код на Linux-машине или контейнере Docker.. но между всей этой сложностью вы можете получить гораздо больше от принятия фреймворка.
Serverless хорошо принят и поддерживает пользовательские пакеты python. Он даже интегрируется с Docker для компиляции ваших зависимостей на основе python и создания пакета развертывания для вас.
Если вы ищете полный учебник по этому вопросу, я написал один для функций Lambda Python здесь.
Ответ 5
Для решения этой конкретной проблемы мы используем библиотеку под названием juniper. Короче говоря, все, что вам нужно сделать, это создать очень простой файл манифеста, который выглядит следующим образом:
functions:
# Name the zip file you want juni to create
router:
# Where are your dependencies located?
requirements: ./src/requirements.txt.
# Your source code.
include:
- ./src/lambda_function.py
Из этого файла манифеста вызов juni build
создаст для вас артефакт zip файла. Файл будет включать все зависимости, которые вы укажете в файле require.txt.
Команда создаст этот файл ./dist/router.zip
. Мы используем этот файл вместе с шаблоном sam. Однако вы можете использовать этот zip файл и загрузить его на консоль или через awscli.