La base de données AWS Aurora MySQL ne peut pas être interrogée par la fonction Node Lambda
P粉184747536
2023-08-25 21:31:48
<p>J'essaie d'utiliser une fonction Lambda pour écrire des données dans une base de données AWS Aurora MySQL. </p>
<h3>code</h3>
<p>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. </p>
<pre class="brush:php;toolbar:false;">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 ;
};</pré>
<p>Le résultat de la fonction est le suivant : </p>
<pre class="brush:php;toolbar:false;">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</pre>
<p>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)</p>
<h3>Stratégie</h3>
<p>Les stratégies suivantes sont incluses dans le rôle d'exécution de la fonction Lambda : <code>AWSLambdaVPCAccessExecutionRole</code> et <code>AWSLambda_FullAccess</code></p>
<h3>Autres</h3>
<p>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 à <code>autorisation manquante</code> ? </p>
<p>Je ne comprends pas ce qui me manque à ce stade</p>
Le problème est
db.query
l'utilisation du style de rappel au lieu du style de promesse. Vous devez le convertir pour utiliser les promesses.Une façon est d'utiliser
Util.promisify
...