AWS Aurora MySQL数据库无法被Node Lambda函数查询
P粉184747536
P粉184747536 2023-08-25 21:31:48
0
1
579

我正在尝试使用Lambda函数向AWS Aurora MySQL数据库写入数据。

代码

出于某种原因,它似乎无法正常工作。到目前为止,我的代码非常简单,但无法正确执行。这是一个简单的Lambda函数,当用户注册到Cognito时调用,应该在SQL数据库中创建一个新条目,包含用户凭据。

const mysql = require('mysql') const db = mysql.createConnection({ host: "*****", port: *****, user: "*****", password: "*****", database: "*****", }) 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") const query = `INSERT INTO users (Uid, Username, Email) VALUES (${user.uid}, ${user.username}, ${user.email})` await db.query(query, (err: any, result: any) => { if (err) console.error(err) console.log("query response: " + result) }) console.log("after query") return event; };

函数的输出如下:

START RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b Version: $LATEST 2022-03-17T14:02:35.956Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO before query 2022-03-17T14:02:35.961Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO after query END RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b REPORT RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b Init Duration: 0.14 ms Duration: 138.07 ms Billed Duration: 139 ms Memory Size: 128 MB Max Memory Used: 128 MB

注意:查询函数没有找到日志记录(应该抛出错误或记录响应)

策略

Lambda函数的执行角色中包含以下策略:AWSLambdaVPCAccessExecutionRoleAWSLambda_FullAccess

其他

Lambda函数和Aurora位于同一VPC的不同子网中。我不确定这是否会导致问题。但这不会导致函数抛出错误吗?类似于missing authorization的错误?

我不明白我在这一点上还缺少什么

P粉184747536
P粉184747536

全部回复 (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; };
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!