基于AWS Lambda镜像打包的FastAPI Docker容器本地运行返回404错误
问题原因
你使用的amazon/aws-lambda-python基础镜像是AWS官方为Lambda量身打造的运行时镜像,默认启动的是Lambda的运行时代理服务,不是直接暴露FastAPI的HTTP服务端口。你直接GET访问localhost:9000当然会返回404,因为这个路径根本不是Lambda运行时代理的可访问路径。
解决方案
分为两种测试场景选择对应方案即可:
场景1:按照Lambda官方规范做本地测试
Lambda运行时镜像本地测试需要用POST请求调用指定的触发路径,参数模拟Lambda的触发事件:
- 保持你当前的Dockerfile、代码配置不变,正常启动容器:
docker run -p 9000:8080 try98 - 新开一个终端,用curl或者Postman发送POST请求到指定路径,模拟API网关触发事件:
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"requestContext": {"http": {"method": "GET", "path": "/"}}, "rawPath": "/"}'
- 执行后就会正常返回你写的
{"message": "Hello World"}结果。
场景2:想要直接像普通FastAPI一样本地访问测试
如果不想每次都用POST请求调用,希望直接在浏览器访问localhost:9000看结果,可以临时修改Dockerfile的启动命令,直接启动uvicorn服务:
FROM amazon/aws-lambda-python:3.8 COPY . ${LAMBDA_TASK_ROOT} RUN pip install -r requirements.txt # 本地测试时用这个启动命令,部署到Lambda时再改回["main.handler"]即可 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
重新构建运行后,直接访问localhost:9000就能正常看到返回结果。
内容的提问来源于stack exchange,提问作者Faisal Shani
相关产品推荐
相关产品推荐

