Serverless

API Gateway con Lambda-"Imposible importar el módulo 'server':No hay módulo llamado 'servidor'"

Hello Everyone,

Traté de configurar una api sin servidor usando mecanografiado según https://github.com/fortejas/example-serverless-python-api en un entorno cloud9 La implementación es exitosa, sin embargo, cuando accedo al punto final de la API REST, obtengo el siguiente error

curl -d POST https://8egyaaan6f.execute-api.ap-southeast-2.amazonaws.com/prod/update {"mensaje": "Error interno del servidor"}

[ERROR] Runtime.ImportModuleError: Unable to import module 'server': No module named 'server'
Traceback (most recent call last):

En una investigación más profunda, el error parece estar relacionado con https://github.com/fortejas/example-serverless-python-api/blob/main/lambda-api/server.py Se agradece cualquier ayuda

Tue Jan 11 05:32:21 UTC 2022 : Endpoint response body before transformations: {"errorMessage": "Unable to import module 'server': No module named 'server'", "errorType": "Runtime.ImportModuleError", "requestId": "0be79d0e-e10b-4651-8838-b4e8dff65143", "stackTrace": []}
Tue Jan 11 05:32:21 UTC 2022 : Lambda execution failed with status 200 due to customer function error: Unable to import module 'server': No module named 'server'. Lambda request id: 0be79d0e-e10b-4651-8838-b4e8dff65143
Tue Jan 11 05:32:21 UTC 2022 : Method completed with status: 502




Hi,

Por el mensaje de error, parece que la función Lambda no puede encontrar el método Handler que se encuentra en el archivo server.py. Lambda intenta buscar el archivo server.py pero no puede encontrarlo. Puede leer más sobre cómo configurar Python Lambda Handler aquí en esta documentación

Por favor,compruebe la función Lambda,compruebe la estructura de carpetas y confirme que el Handler que se ha configurado tiene la ruta correcta.

Por ejemplo,digamos que tengo la siguiente estructura de carpetas en mi función Lambda llamada "PythonLambda":

PythonLambda (This is the top Level folder which will have the same name as the Lambda function)
  -> lambda-api (This is a sub-folder)
      -> server.py (the server.py file is under the folder lambda-api)

Si mi controlador de Lambda es server.lambda_handler , recibiré un error idéntico al suyo:

START RequestId: 1d69b994-d660-4d64-ac74-83f6a659ae5c Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'server': No module named 'server'
Traceback (most recent call last):END RequestId: 1d69b994-d660-4d64-ac74-83f6a659ae5c
REPORT RequestId: 1d69b994-d660-4d64-ac74-83f6a659ae5c	Duration: 1.04 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 37 MB	
  • Esto se debe a que Lambda intenta buscar server.py en la carpeta de nivel superior pero no lo encuentra.

Para poder llamar con éxito a este Lambda, debemos cambiar el controlador a lambda-api.server.lambda_handler para que Lambda pueda encontrarlo en la carpeta.

START RequestId: 3c1b9e59-7ed0-41fe-8207-abc163067f56 Version: $LATEST
END RequestId: 3c1b9e59-7ed0-41fe-8207-abc163067f56
REPORT RequestId: 3c1b9e59-7ed0-41fe-8207-abc163067f56	Duration: 0.90 ms	Billed Duration: 1 ms	Memory Size: 128 MB	Max Memory Used: 37 MB