如何为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软件包:
/lib
/
/
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']
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命令的解决方案都无济于事。
答案 0 :(得分:0)
由于我遇到了同样的问题,因此您可以在此处找到所需的库: https://pkgs.org/download/libaio (例如Arch Linux软件包)
然后将文件从该软件包中提取到lambda软件包的/ lib文件夹中。
答案 1 :(得分:0)
为Windows x64下载Instant Client Basic Lite。该错误将得到解决!由于您已经下载了linux版本并在Windows上使用了它,所以您将收到该错误。