【问题标题】:Node Lambda: MySQL query never runs节点 Lambda:MySQL 查询从不运行
【发布时间】:2021-05-10 21:59:45
【问题描述】:

用 Postman 进行测试,我会尽量把这点说清楚,如果这没有意义,请指教。

我有一个 Lambda,它在 AWS 上使用 MySQL RDS 数据库,并且在访问 AWS 上的数据库时可以在本地正常工作。从auth 端点成功获取 JWT 后,我尝试访问login 端点并得到502 Bad Gateway。使用 CloudWatch 日志,我可以在登录查询运行之前跟踪故障。我已经确认我的 MySQL 配置是正确的并且我已经连接到数据库。 lambda 和数据库在同一区域DB: us-east-1flambda: us-east-1

我已确认此端点的 OPTIONS 和 POST 请求方法均设置为在 API 网关中启用了 CORS。我正在使用我的 serverless.yml 在所有端点上设置 cors: true,即使我在我的索引文件中使用了 app.use(cors())

502 的错误消息是 {"message": "Internal server error"}

这是我的代码中的失败点:

'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);
    }
  },
};

【问题讨论】:

  • 这里的mysql 是什么?
  • 这是我连接到数据库时返回的serverless-mysql 对象。

标签: mysql node.js amazon-web-services aws-lambda


【解决方案1】:

我刚刚创建了完全相同的用例,因为我有一个用 Java 编写的 LAMBDA 函数,用于查询来自 MySQL RDS 实例的数据。效果很好。

这是你的问题:

要从 Lambda 函数连接到 RDS 实例,您必须使用与 RDS 实例相同的安全组设置入站规则。详情请How do I configure a Lambda function to connect to an RDS instance?

【讨论】:

  • 不错的电话,在工作中我通常在我的 serverless.yml 文件中设置 VPC 和安全组,但出于某种原因,在这个个人项目中我将它们排除在外。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2017-07-03
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多