AWS Lambda con Pandas y NumPy
AWS Lambda no incluye las bibliotecas Pandas/NumPy Python de forma predeterminada. ¿Cómo usar Pandas y NumPy con funciones Lambda?
Planteamiento del problema
No hay pandas predeterminados en AWS Lambda. Puede ver el entorno de ejecución de AWS Lambda y las bibliotecas disponibles aquí. Verifiquemos y creemos la función AWS Lambda Python 3.6 con el siguiente código:
Respuesta de Lambda:
Unable to import module 'lambda_function': No module named 'pandas'
Cree un nuevo directorio local con el archivo lambda_function.py
. Instale Pandas en el directorio local con pip:
$ pip install -t . pandas
Elimina *.dist-info
y __pycache__
. Prepare el archivo zip.zip
con el archivo lambda_function.py
y Pandas:
$ rm -r *.dist-info __pycache__
$ zip -r zip.zip .
Archivo zip.zip con el archivo lambda_function.py y Pandas
Cree una nueva función lambda (por ejemplo, medium
). Vaya a la sección Function code
y seleccione Upload a .zip file
en el menú desplegable Code entry type
. Haga clic en el botón Cargar. Cargue el archivo zip.zip
. Finalmente haga clic en el botón Save
:
Cargar paquete de funciones
Verifiquemos la nueva respuesta de la función Lambda:
Unable to import module 'lambda_function': Missing required dependencies ['numpy']
¿Qué? Como puede ver a continuación, el archivo zip.zip
incluye NumPy.
Archivo zip.zip con el archivo lambda_function.py, Pandas y Numpy
El método estándar no funciona. AWS Lambda necesita Pandas/NumPy especiales. Arreglemoslo.
Nota: No olvide limpiar primero su entorno de trabajo. Elimina los directorios pandas
, numpy
y *.dist-info
:
$ rm -r pandas numpy *.dist-info
Solución
AWS Lambda utiliza el sistema operativo Amazon Linux. La idea es descargar Pandas y NumPy compatibles con Amazon Linux.
Pandas. Vaya a https://pypi.org/project/pandas/#files. Busque y descargue el paquete *manylinux1_x86_64.whl
más reciente. En mi caso, para Python 3.6 es el archivo pandas-0.24.1-cp36-cp36m-manylinux1_x86_64.whl.
NúmPy. Haz lo mismo con NumPy. El archivo es numpy-1.16.1-cp36-cp36m-manylinux1_x86_64.whl.
Descargue los archivos whl al directorio con lambda_function.py
. Descomprimir archivos whl.
$ unzip numpy-1.16.1-cp36-cp36m-manylinux1_x86_64.whl $ unzip pandas-0.24.1-cp36-cp36m-manylinux1_x86_64.whl
Nota: Lambda con Python 3.7 requiere pytz lib: $ pip install -t . pytz
Elimine los archivos whl, *.dist-info
y __pycache__
. Prepare un nuevo archivo zip.zip
:
$ rm -r *.whl *.dist-info __pycache__ $ zip -r zip.zip .
Archivo zip.zip para Amazon Linux con el archivo lambda_function.py, Pandas y Numpy
Navegue hasta la función lambda (por ejemplo, medio). Vaya a la sección Function code
y seleccione Upload a .zip file
en el menú desplegable Code entry type
. Haga clic en el botón Upload
. Cargue el archivo zip.zip
. Finalmente haga clic en el botón Save
:
Cargar paquete de funciones
Verifiquemos la nueva respuesta de la función Lambda:
Execution result: succeeded
¡Felicitaciones!