通过Python从AWS Lambda访问Oracle

问题描述 投票:0回答:3

我正在编写(希望)一个简单的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 aws-sdk amazon-rds boto3
3个回答
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
投票

旧版本的boto3不支持rds-data。但您可以使用zip文件夹部署包。我建议您使用import cx-oracle使用pip和upload zip包安装cx-oracle。检查一下[How can I access Oracle from Python?


0
投票

经过多次呻吟和咬牙切齿之后,我想出了一个成功的解决方案。

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
© www.soinside.com 2019 - 2024. All rights reserved.