【问题标题】:Unexpected Lambda behaviour意外的 Lambda 行为
【发布时间】:2018-06-22 17:21:04
【问题描述】:

我正在 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..”。它工作得很好。

【问题讨论】:

    标签: mysql node.js aws-lambda


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 2020-02-08
      • 1970-01-01
      • 2021-05-26
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2016-07-16
      相关资源
      最近更新 更多