如何从AWS Lambda函数(Python)建立Oracle数据库连接



如何构建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包:

  1. 部署Oracle Instant Client,Basic Lite for Linux x64,版本18.3进入包目录/lib
  2. 将cx_Oracle.so(从pypi网站(部署到包目录/
  3. 将tnsnames.ora配置并部署到包目录/
  4. 在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']
  1. 在lib目录中,覆盖副本libclntsh.so.18.1libclntsh.so。类似于libocci.solibclntshcore.so

其他不适合我的解决方案

以下是两个类似的SO问题,它们的答案对我不起作用,或者不适用于我的情况:

  1. AWS Lambda无法连接到Oracle Instant ClientPaul的解决方案在上面的第5步中完成。

  2. 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上使用它。。你犯了那个错误。

最新更新