我正在(希望)编写一个简单的AWS Lambda,它将执行RDS Oracle SQL SELECT并通过电子邮件发送结果。到目前为止,我一直在使用Lambda管理控制台,但是我遇到的所有示例都在谈论制作Lambda部署程序包。所以我的第一个问题是可以从Lambda管理控制台执行此操作吗?
下一个问题,我要为Oracle DB API导入什么?在我看到的所有示例中,他们都使用pip下载并构建了一个程序包,但这似乎意味着使用了Deployment Package(请参见上文)。尝试导入示例中列出的任何这些模块,只需给出“没有名为“ ...的模块”。
在编写完上面的内容后,我挖掘了boto3 API引用并提出了:
import boto3
client = boto3.client('rds-data')
但是它给出了错误:未知服务:“ rds-data”。
所以我仍然迷路。
您可能会说,我是Lambda环境的新手。任何建议或示例将不胜感激。谢谢。
答案 0 :(得分:1)
显然,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
。该代码现在应该可以正常运行了。
答案 1 :(得分:1)
较旧的boto3版本不支持rds-data。 但您可以使用zip文件夹部署程序包。 我建议您使用导入cx-oracle 对于使用pip安装cx-oracle 并上传zip包。检查这个 [How can I access Oracle from Python?
答案 2 :(得分:1)
这是使用18c Oracle客户端库的解决方案的更新。如果不是主要解决方案,那么我要花很多时间才能使代码正常工作。希望对以后的任何人有帮助。 (顺便说一句,我尝试使其与Instantclient_19_3一起使用,但绕了一天转了一圈,然后又尝试与InstantClient_18_5一起使用,并且有效)
下载和使用的文件
然后将这些文件放在zip中(lambda_function.py是我的python源代码) zip contents
答案 3 :(得分:0)
经过much吟和咬牙切齿,我想出了一个成功的解决方案。
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 Instant Client Basic和SDK软件包。
使用所有这些项目(包括您自己的Python源代码)创建一个zip文件。为此,将Oracle Instant Client文件libclntsh.so.11.1重命名为libclntsh.so,将libocci.so.11.1重命名为libocci.so。
将zip压缩到S3存储桶中,因为直接部署限制为66mb,并且此zip压缩了一些。
使用适当的IAM权限和VPC访问权限创建Lambda,安装该软件包,应该可以了。
我发现,如果不包括所有即时客户端文件,您将开始收到有关缺少时区和NLS信息的Oracle错误。
zip内容列表(对我来说,是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