有人成功构建了 psycopg3 AWS lambda 层吗?
我在 python 代码中使用 psycopg 版本 3.1.8,在测试 AWS lambda 函数时收到此错误:
{
"errorMessage": "Unable to import module 'lambda_function': no pq wrapper available.\nAttempts made:\n- couldn't import psycopg 'c' implementation: No module named 'psycopg_c'\n- couldn't import psycopg 'binary' implementation: cannot import name 'pq' from 'psycopg_binary' (/var/task/psycopg_binary/__init__.py)\n- couldn't import psycopg 'python' implementation: libpq library not found",
"errorType": "Runtime.ImportModuleError",
"requestId": "839c4ea4-a313-42ab-b439-4bbde7830268",
"stackTrace": []
}
我尝试查找一下,psycopg2 层上有很多实现,它们已与所需的 libpq 库静态链接。
我尝试按照此处的说明进行操作,但仅限于 psycopg3:https://github.com/jkehler/awslambda-psycopg2
甚至在这里 - 尝试创建一个 libpq 层:https://github.com/DrLuke/postgres-libpq-aws-lambda-layer
但没有成功(我似乎无法获得编译的 libpq.so 文件)
感谢您的帮助!
我能够使用以下方法让它工作:
pip install \
--platform manylinux2014_x86_64 \
--target=my-lambda-function \
--implementation cp \
--python 3.9 \
--only-binary=:all: --upgrade \
"psycopg[binary]"
然后,您可以压缩目录 my-lambda-function 的内容并部署这些内容以供 lambda 函数使用。我的理解是,这里的关键是选择正确的
--platform
,以便 C 库能够正常工作。
我使用了thispsychopg2线程作为参考。
即使使用 Docker 容器,我也尝试让 psycopg3 在 AWS Lambda 函数中工作,但无法让它工作。但是 pg8000 (https://pypi.org/project/pg8000/) 模块工作正常。
@ncarter 提供的答案已经差不多了,但对我们来说不起作用。 我们遵循了有关 AWS Lambda Layers 的AWS 文档,并且运行顺利:
这对我们不起作用。为了在 AWS Lambda Layer 中工作,我们必须使用:
python3 -m pip install --platform manylinux2014_x86_64 \
--target=package \
--implementation cp \
--python-version 3.10 \
--only-binary=:all: \
--upgrade \
"psycopg[binary]" -t $(ARTIFACTS_DIR)/python