Lambda AWS 未调用节点 mysql 回调
Lambda AWS not calling node mysql callbacks
我正在尝试通过 AWS 上的 Lambda 处理通过其简单通知服务从亚马逊的简单电子邮件服务发送的退回邮件。
我正在运行宁以下脚本:
var aws = require('aws-sdk');
var mysql = require('mysql');
Processor = {};
Processor.initializeConnection = function() {
console.log('Connecting to database');
Processor.connection = mysql.createConnection({
host : 'MYHOST',
user : 'MYUSER',
password : 'PASSWORD',
database : 'DATABASE'
});
console.log('Connection configured');
Processor.connection.connect(function(err) {
console.log('****');
console.log(err);
if (err != null) {
console.log('Could not connect to database');
return false;
} else {
console.log('Successfully connected to database');
return true;
}
});
console.log('Should not get here');
};
exports.handler = function(event,context){
console.log('Received event:');
var message = event.Records[0].Sns.Message;
// Get the object from the event and show its content type
if(Processor.initializeConnection()) {
context.fail('Database connection failed');
return;
}
context.succeed(message);
};
我将此脚本作为 index.js 连同包含节点 mysql 模块的 node_modules 一起上传为 zip 文件。
当这是 运行 时,我从 Amazon 得到以下输出:
START RequestId: 378b8a8c-30d4-11e5-9db4-9b9537e3f53d
2015-07-23T00:46:13.159Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Received event:
2015-07-23T00:46:13.160Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Connecting to database
2015-07-23T00:46:14.035Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Connection configured
2015-07-23T00:46:14.095Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Should not get here
END RequestId: 378b8a8c-30d4-11e5-9db4-9b9537e3f53d
REPORT RequestId: 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Duration: 937.51 ms Billed Duration: 1000 ms Memory Size: 128 MB Max Memory Used: 14 MB
None 连接回退中的代码是 运行。我希望它报告连接失败,因为我没有使用有效的凭据。
如果我 运行 nodejs 下的本地代码版本,连接回调会触发。它只是不会在 Lambda 下触发。
由于 node.js 的异步特性,您的代码可能会因为 context.succeed()
而在所有函数执行之前退出。
参见:
- Async AWS Lambda not executed if caller returns too early
我正在尝试通过 AWS 上的 Lambda 处理通过其简单通知服务从亚马逊的简单电子邮件服务发送的退回邮件。
我正在运行宁以下脚本:
var aws = require('aws-sdk');
var mysql = require('mysql');
Processor = {};
Processor.initializeConnection = function() {
console.log('Connecting to database');
Processor.connection = mysql.createConnection({
host : 'MYHOST',
user : 'MYUSER',
password : 'PASSWORD',
database : 'DATABASE'
});
console.log('Connection configured');
Processor.connection.connect(function(err) {
console.log('****');
console.log(err);
if (err != null) {
console.log('Could not connect to database');
return false;
} else {
console.log('Successfully connected to database');
return true;
}
});
console.log('Should not get here');
};
exports.handler = function(event,context){
console.log('Received event:');
var message = event.Records[0].Sns.Message;
// Get the object from the event and show its content type
if(Processor.initializeConnection()) {
context.fail('Database connection failed');
return;
}
context.succeed(message);
};
我将此脚本作为 index.js 连同包含节点 mysql 模块的 node_modules 一起上传为 zip 文件。
当这是 运行 时,我从 Amazon 得到以下输出:
START RequestId: 378b8a8c-30d4-11e5-9db4-9b9537e3f53d
2015-07-23T00:46:13.159Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Received event:
2015-07-23T00:46:13.160Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Connecting to database
2015-07-23T00:46:14.035Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Connection configured
2015-07-23T00:46:14.095Z 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Should not get here
END RequestId: 378b8a8c-30d4-11e5-9db4-9b9537e3f53d
REPORT RequestId: 378b8a8c-30d4-11e5-9db4-9b9537e3f53d Duration: 937.51 ms Billed Duration: 1000 ms Memory Size: 128 MB Max Memory Used: 14 MB
None 连接回退中的代码是 运行。我希望它报告连接失败,因为我没有使用有效的凭据。
如果我 运行 nodejs 下的本地代码版本,连接回调会触发。它只是不会在 Lambda 下触发。
由于 node.js 的异步特性,您的代码可能会因为 context.succeed()
而在所有函数执行之前退出。
参见:
- Async AWS Lambda not executed if caller returns too early