我正在尝试从 lambda 函数连接到基于 Oracle 引擎的 RDS 并执行简单的选择查询。我已完成以下操作:
- 下载了 instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip 和 instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
- 创建文件夹结构
~/lambda/lib
- 提取 lib 文件夹中的 zip 文件,保持 zip 文件的目录结构完整(我不确定这是否是正确的方法。)
- 下载 libaio1_0.3.110-5_amd64.deb 文件并解压找到两个 .xz 文件,将它们也解压并得到
libaio.so.1
andlibaio.so.1.0.1
文件。 libaio.so.1
从那里复制到~/lambda/lib
- 使用中创建了as的共生链接
libaio.so.1
(libaio.so
但打开时写道链接已损坏,libaio.so.1.0.1 不存在)~/lambda
ln -s libaio.so.1.0.1 libaio.so
libaio.so
cx_Oracle
使用 pip in~/lambda
(pip install cx_Oracle -t .
)安装名为 index.py 的 Lambda 函数(存储在 中
~/lambda
)如下:import os import json import cx_Oracle def handler(event, context): message = "" cursor = None connection = None
try: connection = cx_Oracle.connect("username", "password", "endpoint_of_rds_instance:port_no/ORCL") cursor = connection.cursor() cursor.execute("SELECT LOGIN-ID from USER_INFO where USER_ID=3972") except Exception as e: message += " {Error in connection} " + str(e) finally: if cursor: cursor.close() if connection: connection.close() return {'message' : message}压缩它使用
zip -r9 ~/upload.zip *
无法直接上传 zip,因为文件大小限制为 10 MB,此 zip 文件为 96 MB。在使用 S3 时,它说超出了解压缩文件的大小限制,因为我的 lambda 文件夹的大小超过 200 MB。