AWS LAMBDA RDS连接超时

时间: 2024-04-14 admin IT培训

AWS LAMBDA RDS连接超时

AWS LAMBDA RDS连接超时

我试着写如何使用Node.js它连接到我的RDS数据库lambda函数。该数据库的工作和我的魔豆弹性环境访问。当我运行的功能,它返回一个超时错误。

试图增加超时长达5分钟完全相同的结果。

我的一些研究后得出的结论是,它可能是一个安全问题,但无法找到在亚马逊的文档或this答案的解决方案(这是唯一一个我能找到的主题)。

以下是安全的详细信息:

  • 无论是RDS和拉姆达是相同的安全小组。
  • 该RDS有所有流量的入站和出站规则。
  • 拉姆达有它的作用AmazonVPCFullAccess政策。

我的代码是:

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

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

exports.handler = (event, context, callback) => {

   var connection = mysql.createConnection({
        host     : '...',
        user     : '...',
        password : '...',
        port     : 3306,
        database: 'ebdb',
        debug    :  false
    });

    connection.connect(function(err) {
      if (err) callback(null, 'error ' +err);
      else callback(null, 'Success');
    });

};

我得到的结果是:

"errorMessage": "2017-03-05T05:57:46.851Z 9ae64c49-0168-11e7-b49a-a1e77ae6f56c Task timed out after 10.00 seconds"
回答如下:

在使用方面会工作,你只需要context.callbackWaitsForEmptyEventLoop = false;添加到处理程序,然后利用回调正常是这样的:

exports.handler = (event, context) => {
  context.callbackWaitsForEmptyEventLoop = false; 
  var connection = mysql.createConnection({
    //connection info
  });
  connection.connect(function(err) {
    if (err) callback(err); 
    else callback(null, 'Success');
  });
};

答案就在这里的文档(我花了几个小时找到它):http://docs.aws.amazon/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html

在部分“比较上下文和回调方法”它有一个“重要”说明,解释的事情。

在它读取音符的底部:

因此,如果你想相同的行为上下文方法,则必须设置上下文对象的属性,callbackWaitsForEmptyEventLoop,为false。

基本上,回调继续相对于上下文结束该事件循环事件循环的结束。所以设置callbackWaitsForEmptyEventLoop使得像背景回调的工作。