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

问题描述 投票:1回答:1

如何构建AWS Lambda函数的上载包以连接到Oracle RDS数据库? lambda语言是Python 3.6。我的开发环境是Windows NOT 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。

What I have tried so far

我做了以下步骤来构建我的lambda包:

  1. 将Oracle Instant Client,用于Linux x64的Basic Lite,版本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

Solutions from others that don't work for me

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

  1. AWS Lambda cannot connect to Oracle Instant Client Paul的解决方案在上面的步骤5中完成。
  2. AWS Python Lambda with Oracle托马斯的解决方案在我的情况下对我没有帮助。这些是linux命令。我需要一个Windows解决方案。

An alternative approach

也许我需要问一下:Windows开发人员如何为Amazon Linux Lambda环境获取正确版本的libaio.so.1,以及该文件应该放在lambda包中的哪个位置?任何涉及bash命令的解决方案都没有帮助。

python oracle aws-lambda
1个回答
0
投票

由于我遇到了同样的问题,你可以从这里找到所需的库:https://pkgs.org/download/libaio(例如Arch linux包)

然后将该包中的文件解压缩到lambda包的/ lib文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.