如何构建AWS Lamba函数的上传包以连接到Oracle RDS数据库?lambda语言是Python 3.6。我的开发环境是WindowsNOTlinux。
当我尝试时,我得到错误:
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是amazonlinux系统的一部分,所以应该找到正确版本的libaio.so。
到目前为止我已经尝试了什么
我做了以下步骤来构建我的lambda包:
- 部署Oracle Instant Client,Basic Lite for Linux x64,版本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无法连接到Oracle Instant ClientPaul的解决方案在上面的第5步中完成。
AWS Python Lambda与Oracle托马斯的解决方案对我这种情况没有帮助。这些是linux命令。我需要一个windows解决方案。
另一种方法
也许我需要问:一个windows开发人员是如何为AmazonLinuxLambda环境获得libaio.so.1的正确版本的,这个文件应该放在Lambda包中的哪里?任何涉及bash命令的解决方案都没有帮助。
由于我遇到了同样的问题,您可以从这里找到所需的库:https://pkgs.org/download/libaio(例如Arch linux包(
然后将该包中的文件提取到lambda包的/lib文件夹中。
下载适用于windows x64的即时客户端基本lite。该错误将得到解决!由于您已经下载了linux版本并在windows上使用它。。你犯了那个错误。