Подтвердить что ты не робот

Pandas & AWS Lambda

Кто-нибудь имеет полностью скомпилированную версию pandas, совместимую с AWS Lambda?

После поиска в течение нескольких часов я не могу найти то, что ищу, и документации по этому вопросу не существует.

Мне нужен доступ к пакету в лямбда-функции, но я не был уверен, что пакет правильно компилируется для использования в функции лямбда.

Вместо компиляции может ли кто-либо предоставить воспроизводимые шаги для создания двоичных файлов?

К сожалению, я не смог успешно воспроизвести какие-либо руководства по темам, поскольку они в основном объединяют pandas с scipy, который мне не нужен, и добавляет дополнительный уровень нагрузки.

4b9b3361

Ответ 1

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

Ключевые выносы:

  1. Все статические пакеты должны быть скомпилированы на экземпляре ec2 amazon Linux
  2. Код 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. это следующий шаг:

  1. Добавьте необходимые библиотеки в requirements.txt
  2. Построить проект в контейнере докеров (с использованием aws sam cli: sam build --use-container)
  3. Выполнить код (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