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