mysql - 意外的 Lambda 行为

标签 mysql node.js aws-lambda

我正在 AWS Lambda 上进行 POC。 Lambda 表现出意外的行为。

Lambda代码如下

var DB = require('../util/DB')
let response;

exports.lambda_handler = async (event, context, callback) => {

    console.log("Starting");
    try {
        var connection = await DB.dbConnection();
        connection.release();
        response = {
            'statusCode': 200,
            'body': JSON.stringify({
                message: 'hello world'
            })
        }
        console.log(response)
        callback(null, response)
    }
    catch (error) {
        console.log(error)
        callback(error, null)

    }
    console.log("Sending Response")
    callback(null, response)
};

DB.js 是

var mysql = require('mysql');

let pool = mysql.createPool({
    connectionLimit: 10,
    host: host,
    user: user,
    password: password,
    port: "3306",
    database: database,
    multipleStatements: true
});

pool.on('enqueue', function () {
    console.error('runQry-Waiting for available connection callback');
});

function getConnection() {
    return new Promise((resolve, reject)=> {
        pool.getConnection(function(err, connection) {
            if(err) {
                console.log("\n\nerror")
                reject(err)
            } else {
                console.log("\n\nresolve")
                resolve(connection)
            }
          });
    })
}

当我执行 lambda 时,它会在控制台中打印出“Starting”、“resolve”、response 和“Sending Response”,然后等待直到超时。

我尝试注释掉“var connection..”和“connection..”。效果很好。

最佳答案

看来您在这里犯了一些小错误:-

  1. DB.dbConnection() 不是 DB.js 中的函数,所以我猜代码相当不完整。
  2. 您必须关闭池才能告诉 lambda 可以安全地使用 pool.end(/callback/fn()=>{}) 结束事务。
  3. 我强烈建议您使用 context.callbackWaitsForEmptyEventLoop = false;当您发出回调时告诉 lambda 停止,因为 lambda 函数将始终运行,直到达到您设置的超时限制。

快乐编码:)

编辑:- 使用此作为超时相关问题的引用 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

关于mysql - 意外的 Lambda 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50992854/

相关文章:

amazon-web-services - DLQ 中应该包含哪些类型的异常?

mysql - 需要使用联接更改此查询

javascript - 如何使用来自另一个模块的类型作为 JSDoc 返回/参数类型

node.js - 在高流量期间阻塞 ClientRead 上的空闲连接以进行参数化查询(绑定(bind))

javascript - app.configure(function){} typeerror undefined is not a function

amazon-web-services - AWS AppSync Lambda 授权者

java - AWS API Gateway 集成响应

mysql - 如何在MYSQL中定义触发器以防止某些值插入到表中?

php - Ajax 实时搜索框

每个连接的 MySQL 查询限制