AWS Lambda功能连接问题太多

时间:2019-06-13 16:07:58

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

我的移动应用程序API有20多个lambda函数,因为基于用户的启动较少,所以一切都很好,但是现在随着用户的增加(3000至4000),我面临太多的连接问题lambda函数,因此我开始从我的API中获取内部服务器错误,我知道我在lambda中创建连接时丢失了一些东西,但经过多次尝试后,我无法找到该丢失的链接,下面的代码是用于建立连接

      var con;


      exports.handler = async (event, context) => {
          context.callbackWaitsForEmptyEventLoop = false;
       if (!con || con.state == "disconnected" || con === "undefined") {

    con = secret
        .then((result) => {
            var data = JSON.parse(result.SecretString);
            var connection = mysql.createConnection(
                {
                    "host": data.host,
                    "user": data.username,
                    "password": data.password,
                    "database": data.db
                }
            );
            connection.connect();
            return connection;
        }).catch((err) => {
            throw err;
        });
}

我曾尝试在发送响应之前添加con.destroy(),但这似乎并不能解决问题,因此,如果我还有其他可以做的事情,请告诉我。

1 个答案:

答案 0 :(得分:2)

要确切知道发生了什么是很复杂的,我的第一个猜测总是取决于设置context.callbackWaitsForEmptyEventLoop = false并将连接存储在函数范围之外-两者都已正确完成。

话虽如此,按照定义,以Lambda方式管理连接池的另一种方式是无服务器,它“缺乏”短暂性。这并不意味着您无法通过连接扩展规模,而是必须深入了解问题的信息。

杰里米·戴利(Jeremy Daly)在其博客的以下帖子中提供了处理此问题的良好做法:

此外,他制作了一个可以为您管理此文件的库,名为serverless-mysql-该库是为解决此特定问题而构建的。

个人经验:我在连接+ lambda方面遇到了麻烦,由于这个事实,我已经迁移到了他们的DataAPI solution(我不得不将RDS迁移到Aurora Serverless,这是没什么大不了的)-它的GA发布时间大约是2/3周前。 如果您需要有关Aurora SLS的更多信息,请check it out here