繁体   English   中英

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

[英]How to make an Oracle Database connection from an AWS Lambda function (Python)

如何为 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 是亚马逊 linux 系统的一部分,因此应该找到正确版本的 libaio.so。

到目前为止我尝试过的

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

  1. 将 Oracle Instant Client, Basic Lite for Linux x64, version 18.3 部署到包目录/lib
  2. 将 cx_Oracle.so(来自 pypi 网站)部署到包目录/
  3. 配置并部署 tnsnames.ora 到包目录/
  4. 在 lambda 中,确保环境变量LD_LIBRARY_PATH包含/lib并且环境变量TNS_ADMIN指向目录/

这是在 lambda 内部实现的 python 代码片段:

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

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

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

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

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

另一种方法

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

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

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

下载适用于 Windows x64 的即时客户端基本精简版 .. 该错误将得到解决! 因为你已经下载了 linux 版本并在 windows 上使用它.. 你得到了那个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM