Die AWS Aurora MySQL-Datenbank kann nicht von der Node-Lambda-Funktion abgefragt werden
P粉184747536
P粉184747536 2023-08-25 21:31:48
0
1
592

Ich versuche, eine Lambda-Funktion zu verwenden, um Daten in eine AWS Aurora MySQL-Datenbank zu schreiben.

code

Aus irgendeinem Grund scheint es nicht zu funktionieren. Mein Code ist bisher sehr einfach, wird aber nicht korrekt ausgeführt. Dies ist eine einfache Lambda-Funktion, die aufgerufen wird, wenn sich ein Benutzer bei Cognito registriert und einen neuen Eintrag in der SQL-Datenbank erstellen soll, der die Anmeldeinformationen des Benutzers enthält.

const mysql = require('mysql') const db = mysql.createConnection({ Gastgeber: "****", Hafen: *****, Benutzer: "*****", Passwort: "*****", Datenbank: „*****“, }) export const lambdaHandler = async (event: any, context: any,) => const user = { uid: event.request.userAttributes.sub, Benutzername: event.request.userAttributes.nickname, E-Mail: event.request.userAttributes.email, } console.log("vor der Abfrage") const query = `INSERT INTO users (Uid, Username, Email) VALUES (${user.uid}, ${user.username}, ${user.email})` wait db.query(query, (err: any, result: any) => { if (err) console.error(err) console.log("Abfrageantwort: " + Ergebnis) }) console.log("nach Abfrage") Rückkehrereignis; };

Die Ausgabe der Funktion ist wie folgt:

START RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b Version: $LATEST 2022-03-17T14:02:35.956Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO vor der Abfrage 2022-03-17T14:02:35.961Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO nach Abfrage END RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b REPORT RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b Initialisierungsdauer: 0,14 ms Dauer: 138,07 ms Abgerechnete Dauer: 139 ms Speichergröße: 128 MB Max. genutzter Speicher: 128 MB

Hinweis: Die Abfragefunktion hat den Protokolldatensatz nicht gefunden (sollte einen Fehler auslösen oder die Antwort protokollieren)

Strategie

Die folgenden Richtlinien sind in der Ausführungsrolle der Lambda-Funktion enthalten: AWSLambdaVPCAccessExecutionRole und AWSLambda_FullAccess

Andere

Die Lambda-Funktion und Aurora befinden sich in verschiedenen Subnetzen derselben VPC. Ich bin mir nicht sicher, ob dies ein Problem verursachen wird. Aber würde dies nicht dazu führen, dass die Funktion einen Fehler auslöst? Fehler ähnlich wie fehlende Autorisierung?

Ich verstehe nicht, was ich an dieser Stelle übersehe

P粉184747536
P粉184747536

Antworte allen (1)
P粉960525583

问题在于db.query使用回调样式而不是promise样式。你需要将其转换为使用promises。

一种方法是使用Util.promisify...

const util = require('util'); const mysql = require('mysql'); const db = mysql.createConnection({ host: "*****", port: *****, user: "*****", password: "*****", database: "*****", }); // 将db.query转换为返回promise的函数 const promisifiedQuery = util.promisify(db.query); export const lambdaHandler = async (event: any, context: any,) => { const user = { uid: event.request.userAttributes.sub, username: event.request.userAttributes.nickname, email: event.request.userAttributes.email, }; console.log("before query"); // 顺便说一下,这样做是不好的。请阅读有关如何避免SQL注入的内容。 const query = `INSERT INTO users (Uid, Username, Email) VALUES (${user.uid}, ${user.username}, ${user.email})`; await promisifiedQuery(query).then(result => { console.log("query response: " + result) console.log("after query") }).catch(console.error) return event; };
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!