Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js AWS Lambda NodeJS对SQL Server的调用既不返回数据也不返回错误_Node.js_Amazon Web Services_Aws Lambda - Fatal编程技术网

Node.js AWS Lambda NodeJS对SQL Server的调用既不返回数据也不返回错误

Node.js AWS Lambda NodeJS对SQL Server的调用既不返回数据也不返回错误,node.js,amazon-web-services,aws-lambda,Node.js,Amazon Web Services,Aws Lambda,我正试图使用lambda函数连接到AWS托管的SQL server,但当我在lambda管理控制台中测试它时,或通过API调用,我通过该函数获得了test here 这似乎表明该调用未命中错误且未返回任何记录。因为我知道表中有数据,所以我至少预期会有一个错误,或者理想情况下是数据。如何对此进行故障排除 使用CloudWatch控制台输出,我看到“calledrdsquery”,但在这一点之后什么都没有 var sql = require("mssql"); // config for your

我正试图使用lambda函数连接到AWS托管的SQL server,但当我在lambda管理控制台中测试它时,或通过API调用,我通过该函数获得了
test here

这似乎表明该调用未命中错误且未返回任何记录。因为我知道表中有数据,所以我至少预期会有一个错误,或者理想情况下是数据。如何对此进行故障排除

使用CloudWatch控制台输出,我看到“calledrdsquery”,但在这一点之后什么都没有

var sql = require("mssql");

// config for your database
var config = {
    user: 'xxuser',
    password: 'xxxx',
    server: 'mydns', 
    database: 'Antonio' 
};


module.exports.rdsquery = async event => {

console.log('called rdsquery')
  try{
    // connect to your database
    await sql.connect(config, function (err) {

      console.log('connected')
        if (err) 
          console.log('rdsquery: '+err)
          //return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('sql connect err: '+err)};

        // create Request object
        var request = new sql.Request();
        console.log('rdsquery: request crated')   
        // query to the database and get the records
        request.query('select CustomerNo from FROMMAS_AR_Customer', function (err, recordset) {

            if (err)
            console.log('rdsquery-sql: '+err)   
            //return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('sql err: '+err)};

            // send records as a response
            console.log('logging recordset')
            console.log(recordset);
            return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(recordset)};
            //return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(recordset)};
        });
    });
  }
  catch(e)
  {
    console.log('rdsquery-catch: '+e)   
    return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('ERR: '+e)};
  }

  //return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('test here')};
};

请注意,我不是LAMBDA专家。任何这些信息都可能是完全错误的。如果您发现我如何解决问题的问题,我将不胜感激

因此,经过大量挖掘,我发现我的lambda配置存在几个问题:

  • 默认情况下,我的Lambda函数超时太短。当我将超时时间增加到30秒时,我开始出现一些有用的错误,比如在lambda内部运行测试时,
    无法连接MYIP

  • 然后,我在上找到了一个让我在lambda函数中添加了一个VPC(以便该函数可以访问RDS)

  • 最后,我必须向lambda用户添加策略
    AWSLambdaVPCAccessExecutionRole


  • 你检查过AWS cloudwatch日志了吗?您应该控制台错误,而不是将它们返回到帮助中debug@Adiii我在代码中添加了控制台日志,似乎连接从未建立,故障不可见ms服务器在哪里?是否可以从lambda访问它?假设
    rdsquery
    是您的处理程序函数,您是否仍需要以某种方式调用lambda处理程序的
    callback
    ?是的,在进一步挖掘之后(当我将
    require mssql
    放入try catch中时),我会得到一个“module not found error”。看起来我没有正确地将它加载到lambda中