Amazon Python 2.7 Lambda:DPI-1047:无法加载 64 位 Oracle 客户端库:“libclntsh.so”

Posted

技术标签:

【中文标题】Amazon Python 2.7 Lambda:DPI-1047:无法加载 64 位 Oracle 客户端库:“libclntsh.so”【英文标题】:Amazon Python 2.7 Lambda: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so" 【发布时间】:2018-01-18 21:16:07 【问题描述】:

这篇文章最接近我的经历:Connecting to Oracle RDS using AWS Lambda using Python。但是,在完成所有步骤后,我无法获得成功的结果。

us-west-2 中 ami-aa5ebdd2 的步骤:

sudo yum -y install gcc
mkdir oracle_connect
source oracle_connect/bin/activate
virtualenv oracle_connect
pip install cx_Oracle
wget https://github.com/bumpx/oracle-instantclient/raw/master/instantclient-basic-linux.x64-12.2.0.1.0.zip
mv instantclient_12_2/* oracle_connect/lib/
cd oracle_connect
vi test.py # insert python code here
cp /lib64/libaio.so.1.0.1 lib
ln -s ./lib/libclntsh.so.12.1 ./lib/libclntsh.so
ln -s ./lib/libaio.so.1.0.1 ./lib/libaio.so.1
ln -s ./lib/libaio.so.1.0.1 ./libaio.so.1.0.1
ln -s ./lib/libaio.so.1.0.1 ./libaio.so.1.0.1
cd lib/python2.7/site-packages/
zip -r ~/oracle_connect.zip * .*
cd ~/oracle_connect/lib64/python2.7/site-packages/
zip -r ~/oracle_connect.zip * .*
cd ~/oracle_connect
zip --symlinks -r9 ~/oracle_connect.zip lib/*
zip ~/oracle_connect.zip test.py

测试代码只是 lambda 处理程序中的 cx_Oracle.connect(connection_string)。

有什么建议吗?我试图提供尽可能多的细节。当我尝试在本地运行它时,在我设置之前它不会工作: 导出 LD_LIBRARY_PATH=/home/ec2-user/oracle_connect/lib

所以我将 lambda 上的环境变量设置为: LD_LIBRARY_PATH: /var/task/lib

【问题讨论】:

错误/问题是什么?如果是关于库路径,您可以使用 ldconfig,如 oracle.github.io/odpi/doc/… 中所述(从 cx_Oracle 安装说明链接到) 在 Lambda 上,我无法按照描述执行 ldconfig。以下是完整的错误消息:DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory"。请参阅oracle.github.io/odpi/doc/installation.html#linux 寻求帮助。在导出 LD_LIBRARY_PATH 之前,我在 ec2 实例上遇到相同的错误 您是否查看过 /var/task/lib(我通过谷歌搜索找到的,所以是 YMMV)? 是的,/var/task/lib 正是放置 lib 文件的位置。此外,默认情况下,文件应该是路径的一部分。因此,我不知道为什么它不起作用的原因。我使用了一些 os 命令来验证所有文件是否都在它们应该在的位置。 【参考方案1】:

所以我终于让它工作了。我从 Oracle 重新下载了 instantclient-basic-linux.x64-12.2.0.1.0.zip:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html。我将文件复制到 ~/oracle_connect/lib 文件夹中。我将符号链接更改为 /var/task/lib/(filename) 而不是相对路径,并删除了 lambda 环境变量。现在一切正常。

【讨论】:

您是否有机会提供步骤来完成此操作?

以上是关于Amazon Python 2.7 Lambda:DPI-1047:无法加载 64 位 Oracle 客户端库:“libclntsh.so”的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7 lambda 的几个条件?埃利夫?

在 Google App Engine Datastore (python 2.7) 中存储 lambda 函数

AWS Amazon Connect Lambda输入请求架构

Amazon Aurora Postgres 是不是支持 lambda 调用?

从节点应用程序调用 amazon lambda 函数

python中的AWS Lambda导入模块错误