【发布时间】:2018-11-07 01:03:16
【问题描述】:
如何为 AWS Lamba 函数构建上传包以连接到 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 的正确版本。
到目前为止我所尝试的
我执行以下步骤来构建我的 lambda 包:
- 部署 Oracle Instant Client,Basic Lite for Linux x64,版本 18.3
进入包目录
/lib - 将cx_Oracle.so(来自pypi网站)部署到包目录
/ - 配置tnsnames.ora并将其部署到包目录
/ - 在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']
- 在 lib 目录中,将
libclntsh.so.18.1覆盖复制到libclntsh.so。libocci.so和libclntshcore.so也是如此
其他人提出的不适合我的解决方案
这里有两个类似的 SO 问题的答案对我不起作用,或者不适用于我的情况:
AWS Lambda cannot connect to Oracle Instant Client Paul 的解决方案在上面的第 5 步中完成。
AWS Python Lambda with Oracle 在我的情况下,托马斯的解决方案对我没有帮助。这些是linux命令。我需要一个 Windows 解决方案。
另一种方法
也许我需要问一下:windows 开发者如何获取适用于 Amazon Linux Lambda 环境的正确版本的 libaio.so.1,以及该文件应该放在 lambda 包中的什么位置?任何涉及 bash 命令的解决方案都无济于事。
【问题讨论】:
-
你试过
apt-get install libaio-dev吗?
标签: python oracle aws-lambda