【问题标题】:AWS lambda (python): Dockerfile to install psycopg2?AWS lambda(python):安装 psycopg2 的 Dockerfile?
【发布时间】:2022-04-14 06:09:32
【问题描述】:

我正在尝试使用 this tutorial 将 docker 容器上传到 AWS ECR 以用于 Lambda。我的问题是我的 python 脚本使用 psycopg2,我不知道如何在 Docker 映像中安装 psycopg2。我知道我需要postgres-devel 用于libq 库和gcc 用于编译,但它仍然不起作用。

我的要求.txt:

pandas==1.3.0
requests==2.25.1
psycopg2==2.9.1
pgcopy==1.5.0

Dockerfile:

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

WORKDIR /app

COPY my_script.py .
COPY some_file.csv .
COPY requirements.txt .

RUN yum install -y postgresql-devel gcc*
RUN pip install -r requirements.txt

CMD ["/app/my_script.handler"]

在本地构建、运行映像并测试 lambda 函数后,我收到以下错误消息:

psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above

所以我认为容器的 postgres(-devel) 版本错误。但我不确定如何安装正确的版本?将 psycopg2 脚本部署到 docker 以使用 lambda 的任何提示?

【问题讨论】:

  • 您可以随时尝试将psycopg2 中的requirements.txt 换成psycopg2-binary。这应该与所有需要的库一起预先打包。
  • @KyleParsons 谢谢你,这实际上解决了我的问题。我只是想知道因为in their docs,他们说不要在生产中使用二进制版本
  • 是的,我不明白为什么他们建议从源代码构建而不是使用二进制文件。我在psycopg2-binary 上取得了一些成功,但 YMMV。

标签: python amazon-web-services docker aws-lambda psycopg2


【解决方案1】:

这可能有点过时而且回答得太晚了,但我想我会发布对我有用的内容。

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

COPY . ${LAMBDA_TASK_ROOT}

RUN yum install -y gcc python27 python27-devel postgresql-devel

RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

CMD [ "app.handler" ]

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 2020-11-24
    • 2020-05-14
    • 2020-05-31
    • 2020-05-17
    • 2017-02-15
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多