Psycopg 3 AWS Lambda 层 - 缺少 libpq/静态链接

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

有人成功构建了 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 文件)

感谢您的帮助!

aws-lambda psycopg2 aws-lambda-layers psycopg3
3个回答
1
投票

我能够使用以下方法让它工作:

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线程作为参考。


0
投票

即使使用 Docker 容器,我也尝试让 psycopg3 在 AWS Lambda 函数中工作,但无法让它工作。但是 pg8000 (https://pypi.org/project/pg8000/) 模块工作正常。


0
投票

@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
© www.soinside.com 2019 - 2024. All rights reserved.