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

ske*_*din 7 lambda amazon-web-services node.js aws-lambda

我无法使用Lambda函数中的Node连接到MySQL数据库.我收到的错误是Task timed out after 4.00 seconds.

有没有人有任何解决方案?

以下是我的州概况:

  1. AWS RDS数据库是MySQL数据库.它不仅限于VPC(我可以使用MySQLWorkbench的主机/用户/密码进行连接).
  2. 我的Lambda函数的执行角色设置为将Lambda作为可信实体并给予AdministratorAccess.
  3. 在我的本地机器上,我安装了mysql模块,压缩了我的index.js和node_modules文件夹,并上传到我的Lambda函数.
  4. 我已经尝试将createConnection和connect函数放在处理程序中.我已经尝试将我的查询放在连接函数的回调函数中.我已经尝试将超时时间增加到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);
        });
    
    };
    
    Run Code Online (Sandbox Code Playgroud)

Kan*_*yan 7

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

只有您的第一个呼叫需要花费时间,连续呼叫应该非常快,因为您正在重复使用相同的连接.

此外,通过更高的超时,并不意味着您将被收取超时费用,您将只收取Lambda运行时的费用.

另外,为了加快冷启动时间,您可以将脚本包装好,

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');
    });

};
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


hen*_*lle 5

由于您使用的是 RDS,请查看它的安全组配置。默认情况下,RDS 的安全组将允许来自您自己的 IP 和您默认 VPC 上的默认安全组的入站连接。但是,默认情况下,Lambda 在没有 VPC 的情况下运行,因此无法与 RDS 建立连接。

更改您的 RDS 实例以允许所有 IP 地址,或在您的 RDS 实例可以访问的 VPC 下执行您的 Lambda 函数,并允许访问安全组。