Fehler: Verbindung ETIMEDOUT rds-lambda
Ich versuche eine Verbindung zu RDS mit einer Lambda-Funktion, aber ich erhalte eine Fehlermeldung:
var mysql = require('mysql');
exports.handler = function(event, context) {
//Connect to RDS
var connection = mysql.createConnection({
host : 'hostname',
user : 'username',
password : 'password',
database : 'database'
});
connection.connect( function(err)
{
if (err)
{
throw err;
}
else
{
console.log('DB connection establish');
}
});
};
Den Fehler bin ich immer:
START RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae Version: $LATEST
2016-03-08T23:08:06.737Z 9711e650-e582-11e5-af5f-97ba391a42ae
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:429:11)
at Timer.unrefTimeout [as ontimeout] (timers.js:493: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 exports.handler (/var/task/exports.js:21:12)
END RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae
REPORT RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae
Duration: 10988.17ms
Process exited before completing request
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem und habe es behoben.
Da dies das top-suchergebnis für dieses problem auf stackoverflow, werde ich post meine Lösung hier.
Diese Antwort ist für einen RDS-instance innerhalb einer VPC
Ihre lambda-Ausführung Rolle, die Sie benötigen, um haben VPC-execution-policy
AWSLambdaVPCAccessExecutionRole
weisen Sie eine Sicherheitsgruppe, um die lambda-Funktion
Zusammenfassend stellen die lambda in derselben VPC wie RDS und gibt die lambda-Funktion eingehende Zugriff auf die MYSQL-unabhängig von der IP von der lambda-Funktion.
Ich hatte das gleiche Problem und fand deinen Eintrag beim googeln aber jetzt habe ich es gelöst.
Leider bin ich nicht sicher, welche Aktion tatsächlich gelöst, aber schauen Sie:
Habe ich es zu arbeiten, ohne VPC-Optionen oder die API-Endpunkte, die in der lambda-Funktion und eine Verbindung über
Kann man es auch anders aber denken Sie daran, die immer gelingen und scheitern (oder getan) eine lambda-Funktion, vorzugsweise innerhalb einer if-Klausel, nach der Anweisung. Sonst bekommen Sie vielleicht Probleme durch die lambda-Funktion erfolgreich, bevor die Abfrage Sie bestimmen die Ergebnisse-und Sie nicht bekommen ein ordentliches Ergebnis. Wenn Sie nicht Ende der lambda-Funktion in irgendeiner Weise, die Funktion selbst mal aus, die wird aber anders Aussehen.
Denken Sie auch daran, immer Ende-verbindungen ist dies implizit, direkt über eine Abfrage - diese Methode verbindet und endet von selbst. Nach dem, was ich gelesen in einem anderen thread, dieses problem könnte theoretisch auch auftreten, aufgrund eines noch offenen Verbindung, die Sie einmal aufgerufen.
Ich würde gerne ergänzen ajmcgarry Antwort, denn es hat mich einige zusätzliche Arbeit zu finden, was, die ich brauchte, um das problem zu lösen:
Steuerung des VPC, Folgen Sie dieser Seite Anleitung:
https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-create-iam-role.html
derselben VPC wo der RDS-Instanz ausgeführt wird.
Erste, in der RDS-Instanz, finden die Sicherheit der Gruppe, zu ändern &
fügen Sie eingehende Regeln, um den Zugriff auf die DB-Anschluss von überall
Testzwecken.
Lambda-Funktion
Brauchen Sie visuelle Anweisungen? Dieses video ist nicht zu lang und auch wenn es für Python, die Anleitung gilt für diesen Fall: https://www.youtube.com/watch?v=-CoL5oN1RzQ
Bei mir war es einfach die Sicherheit-Rolle der RDS-war die Begrenzung der eingehenden Verbindung zu meinem ip-Adresse, also war ich natürlich in der Lage, zu verbinden, von meiner lokalen Maschine, aber meine lambda-Funktion nicht, nachdem ich es geöffnet zu Publikum (wie Scherwin schrieb, es ist nicht ideal, aber funktioniert zum testen und Herumspielen) und umgeschichtet meine lambda-Funktion (ja, ich hatte die Umgruppierung der gleiche code, nicht sicher, wie das die betroffenen es) meine lambda-Funktion in der Lage war, zu verbinden.
Ich nicht müssen mein lambda in derselben VPC weil meine Datenbank ist öffentlich zugänglich.
Ich nicht brauchen, zu ändern oder fügen Sie alle Sicherheits-Rollen für mein lambda.