从Lambda函数(Node)连接到MySQL数据库

我一直无法使用来自Lambda函数的Node连接到MySQL数据库。 我收到的错误是Task timed out after 4.00 seconds

有没有人有任何解决scheme?

这里是我的状态的概述:

  1. AWS RDS数据库是一个MySQL数据库。 它不局限于VPC(我可以使用MySQLWorkbench的主机/用户/密码进行连接)。
  2. 我的Lambda函数的执行angular色被设置为将Lambda作为受信任的实体并授予了AdministratorAccess。
  3. 在我的本地机器上,我安装了mysql模块,压缩了我的index.js和node_modules文件夹,并上传到了我的Lambda函数。
  4. 我已经尝试把处理程序中的createConnection和connect函数。 我试图把我的查询里面的连接函数的callback函数。 我试图增加超时时间到10秒。
  5. 我的代码:

     var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'amazon-string.rds.amazonaws.com', user : 'myusername', password : 'mypassword' }); connection.connect(); exports.handler = (event, context, callback) => { connection.query("SELECT * FROM table", function(err, rows, fields) { console.log("rows: " + rows); callback(null); }); }; 

将超时时间增加到一分钟。 这可能是由于lambda函数的冷启动。

只有你的第一个电话应该需要时间,连续的电话应该是非常快的,因为你正在重复使用相同的连接。

另外,超时时间越长,并不意味着你将被收取超时费用,只有在Lambda运行的时候才会收取费用。

同样为了加快冷启动时间,你可以webpack你的脚本,

http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/webpack.html

还有一个问题被注意到,

 var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'amazon-string.rds.amazonaws.com', user : 'myusername', password : 'mypassword' }); connection.connect(); exports.handler = (event, context) => { connection.query("SELECT * FROM table", function(err, rows, fields) { console.log("rows: " + rows); context.succeed('Success'); }); }; 

希望能帮助到你。