节点Lambda:MySQL查询从不运行
和邮递员一起测试,我会尽可能清楚地说明这一点,请告知这是否有意义 我有一个Lambda,它在AWS上使用MySQL RDS数据库,在访问AWS上的数据库时在本地工作良好。从节点Lambda:MySQL查询从不运行,mysql,node.js,amazon-web-services,aws-lambda,Mysql,Node.js,Amazon Web Services,Aws Lambda,和邮递员一起测试,我会尽可能清楚地说明这一点,请告知这是否有意义 我有一个Lambda,它在AWS上使用MySQL RDS数据库,在访问AWS上的数据库时在本地工作良好。从auth端点成功获取JWT后,我尝试点击login端点,得到一个502坏网关。使用CloudWatch日志,我可以在登录查询运行之前跟踪故障。我已经确认我的MySQL配置是正确的,并且我已经连接到数据库。lambda和数据库位于同一区域DB:us-east-1f,lambda:us-east-1 我已经确认该端点的选项和请求后
auth
端点成功获取JWT后,我尝试点击login
端点,得到一个502坏网关
。使用CloudWatch日志,我可以在登录查询运行之前跟踪故障。我已经确认我的MySQL配置是正确的,并且我已经连接到数据库。lambda和数据库位于同一区域DB:us-east-1f
,lambda:us-east-1
我已经确认该端点的选项和请求后方法都是在API网关中启用CORS的情况下设置的。我正在使用serverless.yml在所有端点上设置cors:true
,即使我正在索引文件中使用app.use(cors())
502的错误消息是,{“消息”:“内部服务器错误”}
以下是我的代码中的失败点:
'use strict';
const mysql = require('./index');
module.exports = {
loginSql: async (email, password) => {
// MAKES IT HERE AND THE PARAMS ARE CORRECT
try {
console.log('IN TRY %%%%%%%%%%%%%%');
// SEEMS TO DIE HERE
const results = await mysql.query({
sql: `SELECT
id, first_name, last_name, email
FROM users
WHERE email = ?
AND password = ?`,
timeout: 50000,
values: [email, password],
});
// NEVER MAKES IT HERE /////////
console.log('QUERY RAN %%%%%%%%%%%%');
mysql.end();
if (results.length < 1) return false;
return results;
} catch (error) {
// DOESN'T THROW ERROR
console.log('LOGIN DB ERROR', error);
throw new Error('LOGIN DB ERROR THROWN', error);
}
},
};
“严格使用”;
const mysql=require('./index');
module.exports={
loginSql:async(电子邮件、密码)=>{
//在这里,参数是正确的
试一试{
console.log('IN TRY%%');
//好像死在这里了
const results=wait mysql.query({
sql:`SELECT
id、名字、姓氏、电子邮件
来自用户
其中email=?
密码=?`,
超时:50000,
值:[电子邮件,密码],
});
//从来没来过这里/////////
log('查询已运行%;
end();
if(results.length<1)返回false;
返回结果;
}捕获(错误){
//不会抛出错误
log('LOGIN DB ERROR',ERROR);
抛出新错误(“抛出登录数据库错误”,错误);
}
},
};
我刚刚创建了完全相同的用例,我用Java编写了一个LAMBDA函数,用于查询MySQL RDS实例中的数据。它工作得很好
这是你的问题:
要从Lambda函数连接到RDS实例,您必须使用与RDS实例相同的安全组设置入站规则。有关详细信息
这里什么是
mysql
?这是我连接数据库时返回的无服务器mysql
对象。我很高兴它能为您工作!很好的通话,在工作中我通常在serverless.yml文件中设置VPC和安全组,但由于某些原因,在这个个人项目中我忽略了它们。