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

标签 python oracle aws-lambda

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

到目前为止我尝试了什么

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

  1. 部署适用于 Linux x64 的 Oracle Instant Client 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.1 覆盖复制到 libclntsh.solibocci.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 命令的解决方案都没有帮助。

最佳答案

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

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

关于python - 如何从 AWS Lambda 函数建立 Oracle 数据库连接 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53182334/

相关文章:

sql - 使用内部联接更新引发 SQL 命令未正确结束错误

aws-lambda - lambda (EventSource MQTT) 的 SAM 部署失败,参数 VIRTUAL_HOST 无效

python - 设置继承自 int 或 float 或 str 的类中参数的值

Python:使用多部分/表单数据的请求库

c++ - 如何使用 oci 或任何其他库以 sys 帐户登录 oracle

amazon-web-services - CloudWatch Insights 查询 Lambda 中的错误日志

docker - 使用预先安装了需求的预构建docker容器镜像

python - 条件随机数生成器 python numpy

python - 使用 mod_wsgi 在 Apache 上部署 django 应用程序

sql - 不是 GROUP BY 表达式