当前位置: 首页 > 知识库问答 >
问题:

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

韦安顺
2023-03-14

我无法使用来自Lambda函数的Node连接到MySQL数据库。我收到的错误是任务在4.00秒后超时

有人有什么解决方案吗?

以下是我的状态概述:

>

  • AWS RDS数据库是一个MySQL数据库。它不限于专有网络(我可以使用MySQLWorkbench中的主机/用户/密码进行连接)
  • 我的Lambda函数的执行角色被设置为将Lambda作为受信任的实体并给予管理员访问权限
  • 在我的本地机器上,我安装了mysql模块,压缩了索引。js和node_modules文件夹,并上传到我的Lambda函数
  • 我尝试将createConnection和connect函数放在处理程序中。我尝试将查询放在连接函数的回调函数中。我尝试将超时时间增加到10秒
  • 我的代码:

    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);
        });
    
    };
    
  • 共有2个答案

    贝财
    2023-03-14

    既然您正在使用RDS,请查看它的安全组配置。默认情况下,RDS的安全组将允许从您自己的IP和默认VPC上的默认安全组进行入站连接。然而,默认情况下,Lambda不在专有网络下运行,因此无法建立到RDS的连接。

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

    拓拔意
    2023-03-14

    将超时增加到一分钟。这可能是由于 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');
        });
    
    };
    

    希望有帮助。

     类似资料:
    • 有可能从AWS Lambda函数连接到Redis ElastiCache集群吗? 我不知道是配置问题还是根本不可能。 更新(2016年2月11日):亚马逊为AWS Lambda推出了VPC。 https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-with-a-vpc-using-aws-lambda/

    • 我在AWS Lambda函数中查询MySQL数据库(从AWS远程托管)时遇到问题。 这是我的代码,除了Lambda函数的其余部分(为Alexa技能调用)所需的部分: 当我在命令提示符下用node运行它时,它工作得很好: 我正在使用通过npm安装在index.js目录中的“mysql”模块,并将其压缩和上传到我的Lambda函数中。 同样,这在我的开发机器上有效,但在测试我的Lambda函数时没有说

    • 问题内容: 我正在尝试从iPhone连接到远程mysql数据库。我搜索了许多网站,但没有找到任何帮助。如果有人为此工作,请发送解决方案。 问题答案: 假设您具有服务器端编程(例如PHP或Rails)的经验,则可以仅从URL内容创建NSArray,在其中建立与MySQL服务器的连接并以ASCII或XML格式打印所需的结果。 对帮助格式化服务器页面打印的结果也很有用:http : //develope

    • 我正在尝试从Spring Boot应用程序连接到mySQL数据库。然而,当我试图运行它时,它显示出错误。 我如何解决这个问题? 错误 从我的文件中添加代码片段 pom。xml 应用属性 堆栈跟踪 我还没有在sql中手动创建表,因为我认为spring.jpa.hibernate.ddl-Auto=date应该这样做

    • 我已经写出了我的数据库,它可以运行(在MySql上),并创建了我自己的jsp程序,但当我试图测试数据库和文件之间的连接时,我发现了这个错误 HTTP状态500-无法为JSP编译类: 类型异常报告 消息无法为JSP编译类: 说明服务器遇到内部错误,无法满足此请求。 例外 org.apache.jasper.无法为JSP编译类: 在生成的java文件中的第:[14]行发生错误:[C:\Program

    • 我是debezium的新手,我正在尝试将我的kafka连接器连接到我本地WAMP服务器上已经存在的MySQL数据库。 我用我的邮递员发了以下邮件 我的不良反应