由于 _psycopg 模块出现问题,无法从 AWS Lambda Layer 导入 psycopg2

问题描述 投票:0回答:1

我几天来一直在尝试创建一个使用 psycopg2 的 AWS Lambda 函数。经过大量的教程和大量的试验和错误后,我有以下过程。

我从以下 Dockerfile 构建并运行一个 docker 容器:

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

# Setup
COPY requirements.txt .
RUN pip install --upgrade pip
RUN mkdir python
RUN dnf install -y zip
RUN dnf clean all

# Install prereqs for psycopg2. Info: https://www.psycopg.org/docs/install.html#install-from-source
RUN dnf -y install gcc
RUN dnf -y install python3-devel
RUN dnf -y install libpq-devel

# Install psycopg2 into newly created directory named 'python'
RUN pip install -r requirements.txt -t python

# Zip directory
RUN zip -r9 python.zip python

# Needed or it complains about entry point
ENTRYPOINT ["bash"]

然后我将

python.zip
从容器中复制出来,并将其作为层上传到 Lambda。
requirements.txt
的内容只是一行文字
psycopg2

当我在 Lambda 函数中尝试

import psycopg2
时,我得到以下结果:

{
  "errorMessage": "Unable to import module 'main': No module named 'psycopg2._psycopg'",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "0e68c374-83b9-4531-8ef7-26bf84cc3270",
  "stackTrace": []
}

我解压了

python.zip
并找到了一个名为
_psycopg.cpython-312-aarch64-linux-gnu.so
的文件。如果我将此文件重命名为
_psycopg.so
并重新上传为新图层,我会得到:

{
  "errorMessage": "Unable to import module 'main': /opt/python/psycopg2/_psycopg.so: cannot open shared object file: No such file or directory",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "e47dc97c-733d-4ecf-bf47-acf5d24be0a0",
  "stackTrace": []
}

无论出于何种原因,AWS Lambda 似乎都无法处理这个 .so 文件,即使它可以在 Docker 容器上运行。我见过其他一些解决类似问题的 StackOverflow 问题,但没有一个很有帮助。许多答案建议使用 GitHub 上的库,例如 awslambda-psycopg2,这些库已有多年历史并且不支持最新的 python 版本。如果可能的话我想避免这种情况。我现在非常沮丧,非常感谢任何帮助。预先感谢!

免责声明:我是 AWS 和 Docker 的新手,所以如果我明显不知道自己在做什么,那就是原因。

编辑:我使用的是带有 M2 芯片的 macOS Sonoma 14.3

python docker psycopg2 aws-lambda-layers
1个回答
0
投票

我也遇到过同样的问题。我尝试在requirements.txt中使用aws-psycopg2而不是psycopg2-binary,这解决了我的问题。

使用此链接了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.