【问题标题】:Which port to expose on Docker for AWS Lambda?在 Docker 上为 AWS Lambda 公开哪个端口?
【发布时间】:2022-04-14 18:43:53
【问题描述】:

我正在尝试使用 Docker 映像在 AWS Lambda 上托管一个非常简单的(Hello World)FastAPI。该图像在本地运行良好,但是当我在 Lambda 上运行它时,它会显示端口绑定错误。以下是我尝试使用此图像测试 Lambda 函数时收到的错误详细信息。

START RequestId: ae27e3b1-596d-41f3-a153-51cb9facc7a7 Version: $LATEST
INFO:     Started server process [8]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
ERROR:    [Errno 13] error while attempting to bind on address ('0.0.0.0', 80): permission denied
INFO:     Waiting for application shutdown.
INFO:     Application shutdown complete.
END RequestId: ae27e3b1-596d-41f3-a153-51cb9facc7a7
REPORT RequestId: ae27e3b1-596d-41f3-a153-51cb9facc7a7  Duration: 3034.14 ms    Billed Duration: 3000 ms    Memory Size: 128 MB Max Memory Used: 20 MB  
2021-11-01T00:23:59.807Z ae27e3b1-596d-41f3-a153-51cb9facc7a7 Task timed out after 3.03 seconds

这表示我无法在 0.0.0.0 上绑定端口 80,所以知道我应该在 Dockerfile 中使用哪个端口和主机以使其在 AWS Lambda 上运行吗?谢谢(下面是我正在使用的 Dockerfile)

FROM python:3.9


WORKDIR /code


COPY ./requirements.txt /code/requirements.txt


RUN pip install -r /code/requirements.txt


COPY . /code


CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

【问题讨论】:

    标签: docker aws-lambda serverless fastapi


    【解决方案1】:

    在 AWS Lambda 中运行 FastAPI 时(假设与 AWS API Gateway 一起使用,您需要 Lambda 接收 HTTP 请求)您无法使用 uvicorn 运行它并像您一样绑定到端口正常。

    相反,您需要使用Mangum,它将创建 Lambda 处理程序并转换任何传入的 Lambda 事件并将其作为请求对象发送到 FastAPI,根据我的经验,这一切都很好。

    因此,您创建处理程序的代码可能如下所示:

    if __name__ == "__main__":
        uvicorn.run("myapp:app")
    else:
        handler = Mangum(app)
    

    另外,您的 Dockerfile 将有一个类似这样的入口点:

    ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
    CMD [ "myapp.handler" ]
    

    其中 awslambdaric 是 AWS 提供的 Python 模块,用于在 AWS Lambda 中运行 Docker 容器,如 here 所述。

    另请注意,API Gateway 资源需要使用 Lambda 代理集成配置的方法。

    我没有测试过以上任何一个,它只是一个关于如何开始的想法。

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2015-02-13
      相关资源
      最近更新 更多