我正在编写(希望)一个简单的AWS Lambda,它将执行RDS Oracle SQL SELECT并通过电子邮件发送结果。到目前为止,我一直在使用Lambda管理控制台,但我遇到的所有示例都谈到了制作Lambda部署包。所以我的第一个问题是我可以从Lambda管理控制台执行此操作吗?
我的下一个问题是为Oracle DB API导入什么?在我看到的所有示例中,他们下载并使用pip构建一个包,但这似乎意味着使用部署包(见上文)。尝试导入示例中列出的任何这些模块只需给出“No module named”...
写完上面的内容后,我深入研究了boto3 API参考资料,并提出了:
import boto3
client = boto3.client('rds-data')
但它给出了错误:未知服务:'rds-data'。
所以我还是迷路了。
你可能会说,我是Lambda环境的新手。任何建议或例子将不胜感激。谢谢。
显然,AWS Lambda正在使用旧版本的boto3,它还没有rds-data
。
所以我担心你必须创建一个包含更新版本的boto3的部署包。
一种方法是:
创建lambda处理程序文件(在本例中名为index.py
)。
def my_handler(event, context):
client = boto3.client('rds-data')
print(client)
# do stuff
return "hello world"
在同一个文件夹中添加一个requirements.txt
文件,其中包含以下内容:
awscli >= 1.16.118
boto3 >= 1.9.108
现在运行此(根据您的计算机上的设置,您可以使用pip
而不是pip3
)在索引和需求文件的目录/文件夹中:
pip3 install -r requirements.txt -t .
zip -r somezipname .
接下来,上传此zip并将处理程序的“入口点”更改为index.my_handler
。代码现在应该没有错误地运行。
旧版本的boto3不支持rds-data。但您可以使用zip文件夹部署包。我建议您使用import cx-oracle使用pip和upload zip包安装cx-oracle。检查一下[How can I access Oracle from Python?
经过多次呻吟和咬牙切齿之后,我想出了一个成功的解决方案。
rds_data(由AWS Support确认)仅支持Aurora数据库。希望AWS文档提到这一点。 8 {(>
感谢上面的答案以及Jason Landrey关于解决方案的提示。
要访问RDS / Oracle,您需要使用cx_Oracle。但等等,还有更多。
cx_Oracle不在标准的Lambda环境中,因此您需要自带。我的开发环境在Windows上,但Lambda环境是Linux。因此,您需要下载并安装在我从https://pypi.org/project/cx-Oracle/#files获取的包装目录中。在本地安装:
pip install cx_Oracle-7.1.2-cp37-cp37m-manylinux1_x86_64.whl -t .
你会看到几个文件出现在。然后你需要找到一个Linux系统并下载/lib64/libaio.so.1.0.1并在你的打包目录中将它命名为libaio.so.1。 然后,您需要从http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html下载Oracle即时客户端基本和SDK包。
创建包含所有这些项目的zip文件(包括您自己的Python源代码)。在此过程中,将Oracle即时客户端文件libclntsh.so.11.1重命名为libclinsh.so,将libocci.so.11.1重命名为libocci.so。
将zip上传到S3存储桶,因为直接部署限制为66mb,这个zip有点大。
使用适当的IAM权限和VPC访问权限创建一个Lambda,安装包,它应该是好的。
我发现,如果您不包含所有即时客户端文件,则会开始收到有关缺少时区和NLS信息的Oracle错误。
邮编列表(对我来说,YMMV):
7996693 08/24/2013 12:30 libnnz11.so
0 03/11/2019 16:10 cx_Oracle-7.1.1.data/
0 03/11/2019 16:10 cx_Oracle-7.1.1.data/data/
0 03/11/2019 16:10 cx_Oracle-7.1.1.data/data/cx_Oracle-doc/
0 03/11/2019 16:10 cx_Oracle-7.1.1.dist-info/
1325 03/13/2019 12:35 Email.py
1805 02/19/2019 21:11 cx_Oracle-7.1.1.data/data/cx_Oracle-doc/LICENSE.txt
163 02/19/2019 21:11 cx_Oracle-7.1.1.data/data/cx_Oracle-doc/README.txt
851 02/19/2019 21:11 cx_Oracle-7.1.1.dist-info/METADATA
628 02/19/2019 21:12 cx_Oracle-7.1.1.dist-info/RECORD
109 02/19/2019 21:12 cx_Oracle-7.1.1.dist-info/WHEEL
10 02/19/2019 21:11 cx_Oracle-7.1.1.dist-info/top_level.txt
2270301 02/19/2019 21:11 cx_Oracle.cpython-37m-x86_64-linux-gnu.so
2140 03/13/2019 14:21 getSecrets.py
5560 03/12/2019 08:48 libaio.so.1
53865194 08/24/2013 12:30 libclntsh.so
118738042 08/24/2013 12:30 libociei.so
7633 03/13/2019 16:39 scheduleReports.py