Pandas & AWS Lambda
Кто-нибудь имеет полностью скомпилированную версию pandas, совместимую с AWS Lambda?
После поиска в течение нескольких часов я не могу найти то, что ищу, и документации по этому вопросу не существует.
Мне нужен доступ к пакету в лямбда-функции, но я не был уверен, что пакет правильно компилируется для использования в функции лямбда.
Вместо компиляции может ли кто-либо предоставить воспроизводимые шаги для создания двоичных файлов?
К сожалению, я не смог успешно воспроизвести какие-либо руководства по темам, поскольку они в основном объединяют pandas с scipy, который мне не нужен, и добавляет дополнительный уровень нагрузки.
Ответы
Ответ 1
После некоторого возни с поиском я смог заставить все работать и настроить репо, который можно будет просто клонировать в будущем.
Ключевые выносы:
- Все статические пакеты должны быть скомпилированы на экземпляре ec2 amazon Linux
- Код Python должен загрузить библиотеки в папке lib/перед выполнением.
Github репо:https://github.com/moesy/AWS-Lambda-ML-Microservice-Skeleton
Ответ 2
Я считаю, что вы должны использовать последнюю версию pandas (или, вероятно, ту, что на вашем компьютере). Вы можете создать лямбда-пакет с помощью pandas самостоятельно,
-
Сначала найдите, где пакет pandas установлен на вашем компьютере. i.e Откройте терминал python и введите
import pandas
pandas.__file__
Это должно печатать что-то вроде '/usr/local/lib/python3.4/site-packages/pandas/__init__.py'
- Теперь скопируйте папку pandas из этого места (в данном случае
'/usr/local/lib/python3.4/site-packages/pandas
) и поместите ее в свой репозиторий.
-
Составьте свой лямбда-код с помощью pandas следующим образом:
zip -r9 my_lambda.zip pandas/
zip -9 my_lambda.zip my_lambda_function.py
Вы также можете развернуть свой код на S3 и сделать свой Lambda кодом с S3.
aws s3 cp my_lambda.zip s3://dev-code//projectx/lambda_packages/
Здесь репо, которое поможет вам начать
Ответ 3
Я знаю, что вопрос был задан пару лет назад, и тогда Lambda была на другой сцене.
В последнее время я сталкивался с похожими проблемами, и я подумал, что было бы неплохо добавить сюда новейшее решение для будущих пользователей, сталкивающихся с такой же проблемой.
Оказывается, Amazon выпустил концепцию слоев в re: Invent 2018. Это отличная функция. Этот пост в среде описывает это гораздо лучше, чем я мог бы здесь: Создание нового лямбда-слоя AWS для библиотеки Python Pandas
Ответ 4
Мне удалось развернуть pandas-код в aws-лямбда, используя время выполнения python3.6. это следующий шаг:
- Добавьте необходимые библиотеки в requirements.txt
- Построить проект в контейнере докеров (с использованием aws sam cli: sam build --use-container)
- Выполнить код (sam local invoke --event test.json)
это помощник: https://github.com/ysfmag/aws-lambda-py-pandas-template
Ответ 5
Другой вариант - загрузить предварительно скомпилированные файлы колес, как описано в этом посте: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-compatible/
По сути, вам нужно перейти на страницу проекта на https://pypi.org и загрузить файлы с именами, подобными следующим:
- Для Python 2.7: module-name-version-cp27-cp27mu-manylinux1_x86_64.whl
- Для Python 3.6: module-name-version-cp36-cp36m-manylinux1_x86_64.whl
Затем разархивируйте файлы .whl в каталог вашего проекта и повторно заархивируйте содержимое вместе с лямбда-кодом.
ПРИМЕЧАНИЕ. Основные функциональные файлы Python должны находиться в корневой папке .zip файла результирующего пакета развертывания. Другие модули и зависимости Python могут находиться в подпапках. Что-то вроде:
my_lambda_deployment_package.zip
├───lambda_function.py
├───numpy
│ ├───[subfolders...]
├───pandas
│ ├───[subfolders...]
└───[additional package folders...]
Ответ 6
На github от ryfeus есть несколько предварительно скомпилированных пакетов.
Ответ 7
В репо mthenw/awesome-Layers перечислены несколько общедоступных ламбда-слоев aws.
В частности, в keithrozario/Klayers есть pandas + numpy, и на сегодняшний день он обновлен до 0.25 для панд.
Его ARN является arn:aws:lambda:us-east-1:113088814899:layer:Klayers-python37-pandas:1