【问题标题】:Error connecting to Amazon RDS (MySQL) from node-mysql从 node-mysql 连接到 Amazon RDS (MySQL) 时出错
【发布时间】:2016-08-04 01:29:43
【问题描述】:

我正在尝试使用“felixge/node-mysql”包从托管在 Lambda 中的 nodejs 代码连接到我的 Amazon RDS (MySQL) 实例。我需要帮助来找出我做错了什么。我收到“连接 ETIMEDOUT”错误。我的代码托管在 Lambda 中,并且 Lamda 和 RDS 都属于相同的帐户和区域。我还将 RDSFullAccess 策略附加到 IAM 角色。 RDS 实例也可从所有 IP 访问(无白名单/黑名单 IP)。

同时,我可以使用相同的凭据从本地 MySQL Workbench 进行连接。

这是我的代码:

var connection = mysql.createConnection({
        host     : 'xxxxxxxx.crhmtrscnbgt.us-east-1.rds.amazonaws.com',
        user     : 'my_user',
        password : 'my_passowrd',
        database : 'my_db',
        port     : '3306',
        debug    : true
});  

connection.connect(function(err) {
        if (err) {
                console.error('error connecting: ' + err.stack);
                return;
        }
        console.log('connected as id ' + connection.threadId);
});

var query = "SELECT * FROM users";            

connection.query(query, function(err, rows) {                
        if (err) throw err;                
        console.log(rows);
});

输出是:

2016-04-12T13:32:34.367Z    fa04401a-00b2-11e6-9a23-2dd70e33cc5d    error connecting: Error: connect ETIMEDOUT 
at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:412:13) 
at Socket.g (events.js:180:16) 
at Socket.emit (events.js:92:17) 
at Socket._onTimeout (net.js:327:8) 
at _makeTimerTimeout (timers.js:438:11) 
at Timer.unrefTimeout [as ontimeout] (timers.js:502:5) 
-------------------- 
at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:141:48) 
at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
at Connection.connect (/var/task/node_modules/mysql/lib/Connection.js:123:18) 
at Object.Workout.save (/var/task/storage.js:32:24) 
at Object.storage.saveWorkout (/var/task/storage.js:62:28) 
at intentHandlers.NewExcerciseIntent (/var/task/intentHandlers.js:19:17) 
at AlexaSkill.eventHandlers.onIntent (/var/task/AlexaSkill.js:65:27) 
at AlexaSkill.requestHandlers.IntentRequest (/var/task/AlexaSkill.js:28:37) 
at AlexaSkill.execute (/var/task/AlexaSkill.js:105:24) 
at exports.handler (/var/task/index.js:9:19)

【问题讨论】:

    标签: mysql node.js amazon-rds aws-lambda node-mysql


    【解决方案1】:

    我修好了。问题在于 Lambda 函数配置中的超时设置。它设置为 3 秒,但我的脚本需要超过 10 秒才能执行。这就是我收到 ETIMEDOUT 错误的原因。我将设置更改为 30 秒。现在没有问题,一切正常。

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2014-02-17
      • 2017-04-14
      • 2015-04-10
      相关资源
      最近更新 更多