Node.js AWS Lambda错误-“;errorType";:&引用;字符串“&引用;errorMessage";:&引用;“已处理”;

Node.js AWS Lambda错误-“;errorType";:&引用;字符串“&引用;errorMessage";:&引用;“已处理”;,node.js,amazon-web-services,error-handling,aws-lambda,Node.js,Amazon Web Services,Error Handling,Aws Lambda,我正在尝试编写我的第一个lambda函数并使用我的MySQL数据库。数据库的凭据正确,并且两者位于同一子网中。该函数的目的是显示所有表。下面是我的Node.js 10.x脚本: 'use strict'; console.log("Loading controls function"); const AWS = require('aws-sdk'); const mysql = require('mysql'); exports.handler = (event, con

我正在尝试编写我的第一个lambda函数并使用我的MySQL数据库。数据库的凭据正确,并且两者位于同一子网中。该函数的目的是显示所有表。下面是我的Node.js 10.x脚本:

'use strict';
console.log("Loading controls function");

const AWS = require('aws-sdk');
const mysql = require('mysql');

exports.handler = (event, context) => {
    // context.callbackWaitsForEmptyEventLoop = false; 
    
    const connection = mysql.createConnection({
        host: process.env.RDS_HOST,
        user: process.env.RDS_USER,
        password: process.env.RDS_PASSWORD,
        database: process.env.RDS_DATABASE
    });
    
    connection.query('select * from controls;', function (error, results, fields) {
      if (error){
        context.fail();  
        return { statusCode: 500, body: JSON.stringify(error) }
      } 
      else{
        context.succeed('Success');  
        return { statusCode: 200, body: JSON.stringify(results) }
      } 
    });
};
错误如下所示:

{ “errorType”:“字符串”, “errorMessage”:“已处理”, “跟踪”:[] }


有人能想象出会出现什么问题吗?

我将花一段时间猜测您尚未为Lambda功能配置VPC设置。您可以看到,默认情况下,Lambda实际上并没有获得您所关心的IP或安全组。因此,默认情况下,它实际上无法与VPC中的任何内容通信


转到Lambda,转到VPC设置,并确保将Lambda配置为在VPC的子网中运行,并为其提供一个安全组,使其能够访问您的数据库。

AFAIK Lambda处理程序应该是
异步
函数或接受
回调
。给定您的代码,让它接受
回调
会更简单

'use strict';
console.log("Loading controls function");

const AWS = require('aws-sdk');
const mysql = require('mysql');

exports.handler = (event, context, callback) => {
  const connection = mysql.createConnection({
    host: process.env.RDS_HOST,
    user: process.env.RDS_USER,
    password: process.env.RDS_PASSWORD,
    database: process.env.RDS_DATABASE
  });
    
  connection.query('select * from controls;', function (error, results, fields) {
    if(error) {
      context.fail();
      return callback(null, { statusCode: 500, body: JSON.stringify(error) });
    } 

    context.succeed('Success');  
    callback(null, { statusCode: 200, body: JSON.stringify(results) });
  });
};

Cloudwatch日志是怎么说的?因为我已经对这一点进行了赏金,所以值得注意的是,我遇到这个问题时,在作为AWS step函数步骤的Lambda中返回Javascript
async/await
函数(带或不带
try/catch
块)时。我无法获取传递到以下步骤的有意义的错误数据,因为我只获取通用对象操作报告。请将日志记录语句添加到代码中,然后在CloudWatch日志中查找它们。还考虑到lambda函数可能超过了定义的超时-尽管在CuldWist表中通常有一个显式的错误消息。我在代码中已经有了日志记录语句,我可以在CuldWaRead日志中看到。但是我需要在下一步中输入错误,以便输入一些额外的业务逻辑。lambda绝对不会超时。