Docker for Lambda (FAST API) 中的{“无法导入模块‘main’:没有名为‘main’的模块”,“errorType”:“Runtime.ImportModuleError”}

Sar*_*der 5 python machine-learning amazon-web-services docker

我已经创建了一个 Fastapi,现在尝试使用 Docker 容器将其部署到 AWS lambda。但有一个错误:

{"errorMessage": "Unable to import module 'main': No module named 'main'", "errorType": "Runtime.ImportModuleError", "stackTrace": []}
Run Code Online (Sandbox Code Playgroud)

我已经尽力了。这是我的 main.py 文件:

from fastapi import FastAPI
from starlette.status import HTTP_302_FOUND,HTTP_303_SEE_OTHER
import spacy
from string import punctuation
from mangum import Mangum
import uvicorn
app = FastAPI()

@app.get('/')
def home():
    return {"answer":"Hello World"}

@app.get('/tags')
def prep_data(text):
    tag = tokens(text, nlp)
    tags = getdict(tag)
    return {
        'tags':tags
    }

handler = Mangum(app)
if __name__ == "__main__":
    # handler = Mangum(app)
    uvicorn.run('main:app', host='0.0.0.0', port=8000, reload=False, root_path="/")
Run Code Online (Sandbox Code Playgroud)

该错误表明 main.py 文件没有 main.py 文件,正如您所看到的 dockerfile

FROM public.ecr.aws/lambda/python:3.8

COPY ./app /app

COPY ./requirements.txt /app/requirements.txt

WORKDIR /app

RUN pip install -r requirements.txt

CMD ["main.handler"]
Run Code Online (Sandbox Code Playgroud)

我的目录结构是这样的:

/app
    main.py
Dockerfile
requirements.txt
Run Code Online (Sandbox Code Playgroud)

小智 0

WORKDIR在查找处理程序模块时,Lambda 函数不尊重您在 dockerfile 中设置的内容。它一直在寻找 下的模块/var/task。最初,当我收到此错误时,我的处理程序模块位于目录main中。为了解决这个问题,我在with function下创建了一个新文件,并在其中调用了该函数。或者,您可以将原始处理程序模块移至 下。我选择不避免更新应用程序中的导入路径。app/var/task/applambda_function.py/var/taskhandler()main handler()/var/task