No se puede utilizar el módulo de solicitudes en AWS Lambda

Necesito hacer una llamada de descanso dentro de un script de Python, que se ejecuta una vez por día. No puedo empaquetar el paquete de “solicitudes” en mi paquete python usando AWS Lambdas. Me sale el error: “No se puede importar el módulo ‘lambda_function’: no ​​hay un módulo llamado lambda_function”

Lo dividí en el script predefinido hello_world. Puedo empaquetarlo en un zip y subirlo. Todo funciona. Tan pronto como coloco “solicitudes de importación” en el archivo, aparece este error.

Esto es lo que ya hice:

  1. Los permisos del zip y la carpeta del proyecto (incluidas las subcarpetas) están configurados en `chmod 777`. Así que los permisos no deberían ser un problema.
  2. El script en sí está dentro de la carpeta raíz. Cuando abres el archivo zip, lo ves directamente.
  3. Instalé el paquete de solicitudes en la carpeta raíz del proyecto usando `sudo pip install pedidos -t PATH_TO_ROOT_FOLDER`

La denominación de todo se ve así:

  • archivo zip: lambda_function.zip
  • py-file: lambda_function.py
  • método del controlador: lambda_handler (evento, contexto)
  • controlador-definición en el “webconfig: lambda_function.lambda_handler

El archivo que quiero ejecutar al final se ve así:

import requests import json def lambda_handler(event, context): url = 'xxx.elasticbeanstalk.com/users/login' headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" } response = requests.put(url, headers=headers, verify=False) return 'hello lambda_handler' 

Me alegro por CUALQUIER tipo de ayuda. Ya he usado varias horas en este tema.

Para usar el módulo de solicitudes, simplemente puede importar requests desde botocore.vendored . Por ejemplo:

 from botocore.vendored import requests def lambda_handler(event, context): response = requests.get("https://example.com/") print response.json() 

Puede ver esta información para conocer más módulos que se pueden importar directamente en AWS lambda

Finalmente resolví el problema: la estructura en mi archivo zip estaba rota. Es importante que el script de python y las dependencias empaquetadas (como carpetas) estén en la raíz del archivo zip. Esto solucionó mi problema.

Es un poco deprimente si encuentra errores tan fáciles después de horas de prueba y fracaso.

Creo que tienes lambda_function.py en la consola Lambda. Primero debe crear el paquete de implementación de la función Lambda y luego usar la consola para cargar el paquete.

  • Crea un directorio, por ejemplo, project-dir en su sistema (localmente)
  • cree lambda_function.py en project-dir , copie el contenido de lambda_function.py de la consola lambda y péguelo en project-dir/lambda_function.py
  • pip install requests -t /path/to/project-dir
  • Zip el contenido del directorio project-dir , que es su paquete de implementación (Zip el contenido del directorio, no el directorio)

Vaya a la consola Lambda, seleccione cargar archivo zip en el tipo de entrada de código y cargue su paquete de implementación. Las solicitudes de importación deberían funcionar sin ningún error.

Con este comando descargue el paquete de carpetas.

 pip install requests -t .