Serverless

使用Lambda的API网关-"无法导入模块'server'。没有名为'server'的模块"

Hello Everyone,

我尝试在 cloud9 环境中按照https://github.com/fortejas/example-serverless-python-api使用 typescript 设置无服务器 API 部署成功,但是当我访问 REST API 端点时,我得到了以下错误

curl -d POST https://8egyaaan6f.execute-api.ap-southeast-2.amazonaws.com/prod/update {“消息”:“内部服务器错误”}

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

在进一步调查中,该错误似乎与https://github.com/fortejas/example-serverless-python-api/blob/main/lambda-api/server.py任何帮助有关

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,

从错误消息来看,似乎 Lambda 函数无法找到 server.py 文件中的 Handler 方法。Lambda 尝试查找 server.py 文件,但找不到。您可以在本文档中阅读有关设置 Python Lambda 处理程序的更多信息

请检查Lambda函数,检查文件夹结构,确认已配置的处理程序有正确的路径。

例如,假设我在名为 "PythonLambda "的Lambda函数中拥有以下文件夹结构。

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)

如果我的 Lambda 处理程序是 server.lambda_handler ,我将收到与您的错误相同的错误:

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	
  • 这是因为Lambda试图在顶层文件夹中寻找server.py,但无法找到它。

为了能够成功调用这个 Lambda,我们必须将处理程序更改为 lambda-api.server.lambda_handler 以便 Lambda 可以在该文件夹下找到它。

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