La base de données AWS Aurora MySQL ne peut pas être interrogée par la fonction Node Lambda
P粉184747536
P粉184747536 2023-08-25 21:31:48
0
1
575

J'essaie d'utiliser une fonction Lambda pour écrire des données dans une base de données AWS Aurora MySQL.

code

Pour une raison quelconque, cela ne semble pas fonctionner. Jusqu'à présent, mon code est très simple mais il ne s'exécute pas correctement. Il s'agit d'une simple fonction Lambda qui est appelée lorsqu'un utilisateur s'inscrit sur Cognito et doit créer une nouvelle entrée dans la base de données SQL contenant les informations d'identification de l'utilisateur.

const mysql = require('mysql') const db = mysql.createConnection({ hôte: "****", port: *****, utilisateur: "*****", mot de passe: "*****", base de données: "*****", }) export const lambdaHandler = async (événement : n'importe quel, contexte : n'importe lequel,) => utilisateur const = { ID utilisateur : event.request.userAttributes.sub, nom d'utilisateur : event.request.userAttributes.nickname, email : event.request.userAttributes.email, } console.log("avant requête") const query = `INSERT INTO users (Uid, Username, Email) VALUES (${user.uid}, ${user.username}, ${user.email})` wait db.query(query, (err : any, result : any) => { si (erreur) console.erreur (erreur) console.log("réponse à la requête : " + résultat) }) console.log("après requête") événement de retour ; }; 

Le résultat de la fonction est le suivant :

START RequestId : bb1d2143-97e4-4761-a48a-f482cf94f73b Version : $LATEST 2022-03-17T14:02:35.956Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO avant requête 2022-03-17T14:02:35.961Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO après requête FIN RequestId : bb1d2143-97e4-4761-a48a-f482cf94f73b REPORT RequestId : bb1d2143-97e4-4761-a48a-f482cf94f73b Durée d'initialisation : 0,14 ms Durée : 138,07 ms Durée facturée : 139 ms Taille de la mémoire : 128 Mo Mémoire maximale utilisée : 128 Mo

Remarque : La fonction de requête n'a pas trouvé l'enregistrement du journal (elle devrait générer une erreur ou enregistrer la réponse)

Stratégie

Les stratégies suivantes sont incluses dans le rôle d'exécution de la fonction Lambda : AWSLambdaVPCAccessExecutionRole et AWSLambda_FullAccess

Autres

La fonction Lambda et Aurora se trouvent dans des sous-réseaux différents du même VPC. Je ne sais pas si cela posera un problème. Mais cela ne provoquerait-il pas une erreur de la fonction ? Erreur similaire à autorisation manquante ?

Je ne comprends pas ce qui me manque à ce stade

P粉184747536
P粉184747536

répondre à tous (1)
P粉960525583

Le problème estdb.queryl'utilisation du style de rappel au lieu du style de promesse. Vous devez le convertir pour utiliser les promesses.

Une façon est d'utiliserUtil.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; };
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!