Pandas y AWS Lambda
aws-lambda (5)
¿Alguien tiene una versión completamente compilada de pandas que sea compatible con AWS Lambda?
Después de buscar por algunas horas, parece que no puedo encontrar lo que estoy buscando y la documentación sobre este tema es inexistente.
Necesito acceder al paquete en una función lambda, sin embargo, no he logrado que el paquete se compile correctamente para usarlo en una función Lambda.
En lugar de la compilación, ¿alguien puede proporcionar pasos reproducibles para crear los binarios?
Desafortunadamente, no he podido reproducir con éxito ninguna de las guías sobre los temas, ya que en su mayoría combinan pandas con scipy que no necesito y agregan una capa adicional de carga.
Creo que deberías poder usar la versión reciente de pandas (o probablemente, la de tu máquina). Puedes crear un paquete lambda con pandas por ti mismo de esta manera,
Primero encuentre dónde está instalado el paquete pandas en su máquina, es decir, abra un terminal python y escriba
import pandas pandas.__file__
Eso debería imprimir algo como
''/usr/local/lib/python3.4/site-packages/pandas/__init__.py''
- Ahora copie la carpeta pandas desde esa ubicación (en este caso
''/usr/local/lib/python3.4/site-packages/pandas
) y colóquela en su repositorio. Empaquete su código Lambda con pandas como este:
zip -r9 my_lambda.zip pandas/ zip -9 my_lambda.zip my_lambda_function.py
También puede implementar su código en S3 y hacer que su Lambda use el código de S3.
aws s3 cp my_lambda.zip s3://dev-code//projectx/lambda_packages/
Después de algunos retoques y un montón de googlear, pude hacer que todo funcionara y configurar un repositorio que solo se puede clonar en el futuro.
Puntos clave:
- Todos los paquetes estáticos deben compilarse en una instancia de ec2 amazon Linux
- El código de Python necesita cargar las bibliotecas en la carpeta lib / antes de ejecutar.
Repositorio de Github: https://github.com/moesy/AWS-Lambda-ML-Microservice-Skeleton
Logré implementar un código de pandas en aws lambda usando el tiempo de ejecución de python3.6. Este es el paso que sigo:
- Agregue las bibliotecas requeridas en Requirements.txt
- Genere el proyecto en un contenedor docker (utilizando aws sam cli: sam build --use-container)
- Ejecute el código (invocación local de sam --event test.json)
este es un ayudante: https://github.com/ysfmag/aws-lambda-py-pandas-template
Otra opción es descargar los archivos de rueda precompilados como se explica en esta publicación: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-compatible/
Esencialmente, debe ir a la página del proyecto en https://pypi.org y descargar los archivos con el nombre siguiente:
- Para Python 2.7: nombre-módulo-versión-cp27-cp27mu-manylinux1_x86_64.whl
- Para Python 3.6: nombre-módulo-versión-cp36-cp36m-manylinux1_x86_64.whl
Luego descomprima los archivos .whl en el directorio de su proyecto y vuelva a comprimir el contenido junto con su código lambda.
Sé que la pregunta se hizo hace un par de años y Lambda estaba en un escenario diferente en ese entonces.
Últimamente tuve problemas similares y pensé que sería una buena idea agregar la solución más nueva aquí para los futuros usuarios que enfrentan el mismo problema.
Resulta que Amazon lanzó el concepto de capas en el re: Invent 2018. Es una gran característica. Este post en medio lo describe mucho mejor de lo que podría aquí: Crear una nueva capa de AWS Lambda para Python Pandas Library