由于psycopg2,使用无服务器框架进行部署无法正常工作。 psycopg2的Docker安装不起作用

时间:2019-09-26 20:21:34

标签: python-3.x aws-lambda psycopg2

这是与我有关的serverless.yml文件:

plugins:
  - serverless-python-requirements

# registers the plugin with Serverless
# hooking into the Framework on a deploy command. Before your package is zipped, it uses Docker to install the
# packages listed in your requirements.txt file and save them to a .requirements/ directory. It then symlinks the
# contents of .requirements/ into your top-level directory so that Python imports work as expected.
custom:
  pythonRequirements:
    dockerizePip: non-linux
    zip: true
    slim: true

在我的requirements.txt文件中,我有这个:psycopg2==2.8.3

当我运行sls deploy时,会看到以下信息:

Error: pg_config executable not found.

    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:   python setup.py build_ext --pg-config /path/to/pg_config build

我的pg_config脚本在/env/local/bin中为:pg_config@ -> ../Cellar/postgresql/11.5_1/bin/pg_config

我还能做什么?简而言之,需要在docker中构建psycopg2,以便创建的二进制文件适用于AWS Lambda。我无法使用serverless-python-requirements插件来使它正常工作。我还能做什么?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我看到的许多帖子都没有帮助我。例如,本文[1]在正确设置安全组和子网方面有很大帮助,但是查看代码[2]我看不到它如何安装,因为它将得到同样的错误。

我所做的是我在最上面的无服务器目录中创建了一个Dockerfile,然后注入了所需的文件。 Dockerfile看起来像这样:

FROM lambci/lambda:build-python3.7
RUN yum install -y postgresql-devel python-psycopg2 postgresql-libs

然后在serverless.yaml文件中添加:

custom:
  pythonRequirements:
    dockerizePip: non-linux
    dockerFile: ./Dockerfile

从文档[3]中获取Dockerfile(现在具有pg_config)并向其中添加requirements.txt。如果超快恢复,您可能需要清除缓存的版本。

Protip:如果编译该函数,然后在调用该函数时出现30秒超时,则可能需要更改安全组和/或子网,以确保它可以访问Redshift集群。

希望有帮助!

  1. https://serverless.com/blog/etl-job-processing-with-serverless-lambda-and-redshift/
  2. https://github.com/rupakg/serverless-etl
  3. https://github.com/UnitedIncome/serverless-python-requirements

答案 1 :(得分:0)

我尝试了@vallard的解决方案,并在AWS Lambda中遇到错误:

ImportModuleError: Unable to import module 'handler.py' libpq.so.5: cannot open shared object file: No such file or directory

最后通过将psycopg2-binary添加到无服务器python-requirements插件所使用的处理程序的requirements.txt中来使其工作。