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

时间:2018-11-07 01:03:17

标签: python oracle aws-lambda

如何为AWS Lamba函数构建上传软件包以连接到Oracle RDS数据库? λ语言是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是亚马逊linux系统的一部分,因此应找到libaio.so的正确版本。

到目前为止我尝试过的一切

我执行了以下步骤来构建我的lambda软件包:

  1. 部署适用于Linux x64版本18.3的Oracle Instant Client,Basic Lite。 进入软件包目录/lib
  2. 从pypi网站将cx_Oracle.so部署到软件包目录/
  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.1覆盖复制到libclntsh.so。对于libocci.solibclntshcore.so
  2. 同样

其他人的解决方案对我不起作用

这里有两个类似的SO问题,其答案对我不起作用,或者不适用于我的情况:

  1. AWS Lambda cannot connect to Oracle Instant Client Paul的解决方案已在上面的步骤5中完成。

  2. AWS Python Lambda with Oracle 在我的情况下,托马斯的解决方案对我没有帮助。这些是linux命令。我需要Windows解决方案。

一种替代方法

也许我需要问:Windows开发人员如何为Amazon Linux Lambda环境获取正确版本的libaio.so.1,该文件应放在lambda包中的什么位置?任何涉及bash命令的解决方案都无济于事。

2 个答案:

答案 0 :(得分:0)

由于我遇到了同样的问题,因此您可以在此处找到所需的库: https://pkgs.org/download/libaio (例如Arch Linux软件包)

然后将文件从该软件包中提取到lambda软件包的/ lib文件夹中。

答案 1 :(得分:0)

为Windows x64下载Instant Client Basic Lite。该错误将得到解决!由于您已经下载了linux版本并在Windows上使用了它,所以您将收到该错误。