【问题标题】:Testing an AWS Lambda function测试 AWS Lambda 函数
【发布时间】:2018-09-19 00:41:35
【问题描述】:

我需要创建一个 lambda 函数来充当移动 Java 应用程序和 AWS RDS MySQL 数据库之间的中间人。这个想法是从移动应用程序提交查询,然后将它们发送到 lambda 函数,然后它将返回查询。我在我的 AWS lambda 中设置了一个基本的 MySQL 查询:

var mysql = require('mysql');
var config = require('./config.json');
var pool  = mysql.createPool({
  host            : config.dbhost,
  user            : config.dbuser,
  password        : config.dbpassword,
  database        : config.dbname
});

exports.handler = (event, context, callback) -> {
    context.callbackWaitsForEmptyEventLoop = false;
    pool.getConnection(function(err, connection) {
      if (err) throw err; // not connected!

      // Use the connection
      connection.query('select Album from record', function (error, results, fields) {
        // When done with the connection, release it.
        connection.release();

        // Handle error after the release.
        if (error) callback(error);
        else callback(null, results[0].Album);


        // Don't use the connection here, it has been returned to the pool.
      });
    });
};

我目前要做的就是让这段代码运行并输出查询将返回的内容。我看过一些教程,人们似乎只是单击测试并运行代码,但它一直要求我创建一个测试,我不确定我究竟需要做什么来测试这个功能。

编辑:我意识到我在 lambda 上传的代码中遗漏了一个小改动,但我现在在第 10 行收到一个错误,提示存在意外令牌 >。

我不确定这里出了什么问题,因为我看的教程似乎有同样的问题。

【问题讨论】:

  • 如果您只返回一张专辑,也许您应该在查询中添加一个 LIMIT。
  • 更改 -> 为 =>
  • 消除了编码错误,但现在出现超时错误。
  • Lambda 函数默认超时时间为 3 秒,因此您可能需要增加该值。通常,您将不得不决定如何处理超时,因为它们在数据库连接中并不少见。此外,习惯于添加 console.log() 语句并在之后使用 CloudWatch Logs 查看日志输出。
  • 提高超时限制可以让它运行更长的时间,但它仍然会失败,并给出错误“进程在完成请求之前退出”和“握手不活动超时”。我看到其他一些帖子说这可能是代码错误,所以我现在正在重新检查。

标签: mysql amazon-web-services aws-lambda


【解决方案1】:

由于您没有通过上下文传递任何参数,因此您可以使用默认值或空对象 {} 创建一个测试,然后在控制台中单击测试。它将调用您的 Lambda 函数,就好像它是从您的移动应用程序调用的一样,您可以从那里进行调试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2016-02-26
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多