2016-04-13 7 views
2

Ich versuche, eine Verbindung zu meiner Amazon RDS (MySQL) -Instanz aus einem Nodejs-Code in Lambda mit dem Paket "felixge/node-mysql" herzustellen. Ich brauche Hilfe, um herauszufinden, was ich falsch mache. Ich erhalte den Fehler "connect ETIMEDOUT". Mein Code wird in Lambda gehostet, und sowohl Lamda als auch RDS gehören demselben Konto und derselben Region an. Ich habe auch die RDSFullAccess-Richtlinie an die IAM-Rolle angehängt. Auf die RDS-Instanz kann auch von allen IPs aus zugegriffen werden (keine Whitelist/Blacklist-IPs).Fehler beim Verbinden mit Amazon RDS (MySQL) von node-mysql

Zur gleichen Zeit kann ich von meiner lokalen MySQL Workbench mit denselben Anmeldeinformationen verbinden.

Hier ist mein Code:

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

Ausgang ist:

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) 

Antwort

0

ich es fest. Das Problem war mit der Einstellung der Zeitüberschreitung in der Konfiguration der Lambda-Funktion. Es war auf 3 Sekunden eingestellt, aber mein Skript benötigte mehr als 10 Sekunden für die Ausführung. Das ist der Grund, warum ich den ETIMEDOUT Fehler habe. Ich habe die Einstellung auf 30 Sekunden geändert. Jetzt keine Probleme, alles funktioniert gut.