如何为 AWS Lamba 函数构建上传包以连接到 Oracle RDS 数据库? lambda 语言是 Python 3.6。我的开发环境是 Windows 不是 linux。
当我尝试时,出现错误:
DPI-1047: 64-bit Oracle Client library cannot be loaded: "libaio.so.1: cannot open shared object file: No such file or directory
这很奇怪,因为据我了解,libaio.so 是 amazon linux 系统的一部分,因此应该找到正确版本的 libaio.so。
到目前为止我尝试了什么
我执行了以下步骤来构建我的 lambda 程序包:
- 部署适用于 Linux x64 的 Oracle Instant Client Basic Lite,版本 18.3
进入包目录
/lib
- 将 cx_Oracle.so(来自 pypi 网站)部署到包目录
/
- 配置并部署 tnsnames.ora 到包目录
/
- 在 lambda 中,确保环境变量
LD_LIBRARY_PATH
包括/lib
并且环境变量TNS_ADMIN
指向目录/
这里是 python 代码片段,在 lambda 中实现:
oraclePath = os.environ['LAMBDA_TASK_ROOT'] + '/lib'
if oraclePath not in os.environ['LD_LIBRARY_PATH'].split(':'):
os.environ['LD_LIBRARY_PATH'] = oraclePath + ':' + os.environ['LD_LIBRARY_PATH']
if ('TNS_ADMIN' not in os.environ) or (os.environ['TNS_ADMIN'] != os.environ['LAMBDA_TASK_ROOT']):
os.environ['TNS_ADMIN'] = os.environ['LAMBDA_TASK_ROOT']
- 在 lib 目录中,将
libclntsh.so.18.1
覆盖复制到libclntsh.so
。libocci.so
和libclntshcore.so
也类似
其他人的解决方案对我不起作用
这里有两个类似的 SO 问题,其答案对我不起作用,或者不适用于我的情况:
AWS Lambda cannot connect to Oracle Instant Client Paul 的解决方案是在上面的第 5 步中完成的。
AWS Python Lambda with Oracle 托马斯的解决方案对我的情况没有帮助。这些是 linux 命令。我需要一个 Windows 解决方案。
另一种方法
也许我需要问:Windows 开发人员如何为 Amazon Linux Lambda 环境获取正确版本的 libaio.so.1,以及该文件应该放在 lambda 包中的什么位置?任何涉及 bash 命令的解决方案都没有帮助。
最佳答案
因为我遇到了同样的问题,你可以从这里找到需要的库: https://pkgs.org/download/libaio (例如 Arch linux 包)
然后将该包中的文件提取到您的 lambda 包的/lib 文件夹中。
关于python - 如何从 AWS Lambda 函数建立 Oracle 数据库连接 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53182334/