如何在Python中将AWS RDS与AWS Lambda连接-Mysql-connect

时间:2018-07-30 08:54:06

标签: python amazon-web-services aws-lambda amazon-rds mysql-connect

我编写了一个python脚本,该脚本连接到我的AWS RDS数据库,以提取一些数据,执行一些webscraping任务,然后将结果导入回到AWS RDS。当前,这在本地可以很好地工作,但是我现在想将代码上传到AWS Lambda并每天运行。

我承认,已经有很多在线信息可以用来做这样的事情,甚至可能还有太多信息,以至于很难轻易找到确切的解决方案。

到目前为止我所做的:

  • 我已经创建了AWS RDS数据库(完全工作)
  • 我已经创建了一个AWS Lambda函数
  • 通过AWS S3在Zip中上传脚本和相关库
  • 已超时(5分钟)

我已经使用基本脚本测试了上述内容,并且可以正常工作。

当我使用主脚本(不久将显示一些代码)时,出现以下错误:

START RequestId: XXXXX Version: $LATEST
module initialization error: 2003: Can't connect to MySQL server on 'XXXXX. XXXXX.us-east-2.rds.amazonaws.com:3306' (110 Connection timed out)

END RequestId: XXXXX
REPORT RequestId: XXXXX Duration: 140196.56 ms  Billed Duration: 140200 ms  Memory Size: 256 MB Max Memory Used: 55 MB  
module initialization error
2003: Can't connect to MySQL server on 'XXXXX.XXXXX.us-east-2.rds.amazonaws.com:3306' (110 Connection timed out)

在我的代码中,我通过两种方式连接到AWS数据库:

第一个使用mysql-connect,它用于检索要处理的整个数据集:

import mysql.connector
cnx = mysql.connector.connect(user='XXXXX',  password='XXXXX',
                          host='XXXXX.XXXXX.us-east-2.rds.amazonaws.com',
                          port= 3306,
                          database='XXXXX',
                          use_unicode=True)

cursor=cnx.cursor(buffered=True)
df = pd.read_sql('SELECT * FROM table’, con=cnx)

同样,此^代码在本地有效。

连接到AWS RDS数据库的第二种方法是将结果插入表中

from sqlalchemy import create_engine
engine = create_engine('mysql+mysqlconnector://{0}:{1}@{2}/{3}'.
                                           format('XXXXX', 'XXXXX', 
                                                  'XXXXX. XXXXX.us-east-2.rds.amazonaws.com:3306', 'XXXXX'))
df.to_sql(con=engine, name=’table’, if_exists='append',index=False)

同样^这也可以在本地使用,但似乎无法通过AWS Lambda起作用

我对使用AWS非常陌生,似乎确实有很多不同的功能和选项,如果我错过了明显的东西,我深表歉意。如果我需要启用某些步骤的选项,请告诉我。任何帮助将不胜感激。

其他信息:

  • 我正在使用Python 3.6
  • 我正在使用AWS的免费套餐

0 个答案:

没有答案