oynix

于无声处听惊雷,于无色处见繁花

在AWS Lambda中使用psycopg2连接Redshift

  • 环境:MacOS 10.12.6

开始说正题。

Redshift是基于PostgreSQL的二次开发应用,所以,能连接PostgreSQL的工具都可以用来连接Redshift。我选择的是使用最广泛的psycopg2

如果上来就执行:

1
$ pip install psycopg2

你会看到下面的提示错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 ...

or with the pg_config option in 'setup.cfg'.

If you prefer to avoid building psycopg2 from source, please install the PyPI
'psycopg2-binary' package instead.

For further information please check the 'doc/src/install.rst' file (also at
<http://initd.org/psycopg/docs/install.html>).

----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

提示需要一个叫做pg_config的东西。pg_config是个编译PostgreSQL源码后得到的一个文件。所以想要通过这种方式安装psycopg2就需要手动去编译源码。

如果懒得编译,人家已经替你想好了办法,正如提示里所言,

1
2
If you prefer to avoid building psycopg2 from source, please install the PyPI
'psycopg2-binary' package instead.

因此,通过下面命令安装删减版的psycopg2

1
$ pip install psycopg2-binary

然后,在本机上就可以正常使用了。


但是,Lambda不可以。不同于独立的机器,Lambda需要完整的依赖包才能执行。

在Github上搜到了awslambda-psycopg2,作者介绍说是专门解决在Lambda上使用psycopg2的。

按照README.md的步骤,先编译PostgreSQL,再用生成的pg_config去编译psycopg2。但执行后总会报一个错误,

1
No module named 'psycopg2._psycopg'

看着issue里面几个老外说来说去,也没说出个可行的解决方案。

几番尝试下来,终究是填了坑。

其实是编译环境的问题,在什么环境下编译生成的依赖包,只能在该环境下使用。Lambda是在Linux机器上执行的,所以必须在Linux上进行编译,生成的依赖包才可以使用。

就是这么简单。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2019/09/8ab128bc064d/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道