¿Cómo agrego bibliotecas python a una función lambda de AWS para Alexa?

Estaba siguiendo el tutorial para crear una aplicación de Alexa usando Python:

Tutorial Python Alexa

Pude seguir con éxito todos los pasos y hacer que la aplicación funcione. Ahora quiero modificar el código de Python y usar bibliotecas externas, como import requests o cualquier otra biblioteca que instale usando pip. ¿Cómo configuraría mi función lambda para incluir cualquier paquete pip que instale localmente en mi máquina?

Related of "¿Cómo agrego bibliotecas python a una función lambda de AWS para Alexa?"

Tal como se describe en el enlace de la documentación oficial de Amazon aquí. Es tan simple como crear un archivo zip de todos los contenidos de la carpeta después de instalar los paquetes requeridos en la carpeta donde tiene su código lambda de Python.

Como Vineeth señaló anteriormente en su comentario, el primer paso para pasar de un editor de código en línea a un enfoque de carga de archivos zip es cambiar el nombre del controlador de la función lambda en los ajustes de configuración para incluir el nombre del archivo de script de Python que contiene el controlador lambda.

lambda_handler => {your-python-script-file-name} .lambda_handler .

CONFIGURAR FUNCION LAMBDA

Otras soluciones como python-lambda y lambda-uploader ayudan a simplificar el proceso de carga y las PRUEBAS LOCALES más importantes. Estos ahorrarán mucho tiempo en desarrollo.

La documentación oficial es bastante buena. En pocas palabras, debe crear un archivo zip de un directorio que contenga tanto el código de su función lambda como todas las bibliotecas externas que utilice en el nivel superior.

Puede simular eso desactivando su virtualenv, copiando todas las bibliotecas requeridas en el directorio de trabajo (que siempre está en sys.path si invoca un script en la línea de comandos) y verificando si su script aún funciona.

Es posible que desee considerar el uso de marcos como zappa, que se encargarán de empaquetar y desplegar la función lambda para usted.

Puedes usar eso junto con el flask-ask para que sea más fácil hacer las habilidades de Alexa. Incluso hay un video tutorial de esto (del archivo léame de zappa) aquí

Haciendo eco de la respuesta de @ d3ming, un marco es una buena manera de llegar a este punto. Crear el paquete de implementación manualmente no es imposible, pero tendrá que cargar el código comstackdo de sus paquetes, y si está comstackndo ese código en un sistema que no sea Linux, la posibilidad de encontrar problemas con las diferencias entre su sistema y el entorno desplegado de la función Lambda es alto.

Luego, puede trabajar alrededor de eso comstackndo su código en una máquina Linux o en un contenedor Docker … pero entre toda esa complejidad puede obtener mucho más de la adopción de un marco.

Serverless está bien adoptado y tiene soporte para paquetes personalizados de Python. Incluso se integra con Docker para comstackr sus dependencias de Python y construir el paquete de implementación para usted.

Si estás buscando un tutorial completo sobre esto, escribí uno para las funciones de Python Lambda aquí.

Para resolver este problema en particular, estamos usando una biblioteca llamada Juniper . En pocas palabras, todo lo que necesita hacer es crear un archivo de manifiesto muy simple que se vea así:

 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 

Desde este archivo de manifiesto, llamar a juni build creará el artefacto del archivo zip por usted. El archivo incluirá todas las dependencias que especifique en Requirements.txt.

El comando creará este archivo ./dist/router.zip . Estamos usando ese archivo junto con una plantilla sam. Sin embargo, puede usar ese zip y subirlo a la consola, oa través de awscli.