【发布时间】: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