Как добавить библиотеки 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.