AWS Lambda 获取上下文消息
AWS Lambda get context message
我正在使用来自 AWS 控制台的测试功能:
console.log('Loading event');
exports.handler = function(event, context) {
console.log('value1 = ' + event.key1);
console.log('value2 = ' + event.key2);
console.log('value3 = ' + event.key3);
context.done(null, 'Hello World'); // SUCCESS with message
};
并在nodejs中调用如下:
var params = {
FunctionName: 'MY_FUNCTION_NAME', /* required */
InvokeArgs: JSON.stringify({
"key1": "value1",
"key2": "value2",
"key3": "value3"
})
};
lambda.invokeAsync(params, function(err, data) {
if (err) {
// an error occurred
console.log(err, err.stack);
return cb(err);
}
// successful response
console.log(data);
});
一切正常:
//Console Output
{ Status: 202 }
但我也期待收到来自 context.done(null, 'Message') 的消息...
知道如何接收消息吗?
您正在调用 invokeAsync,因此您的 Lambda 函数是 运行 异步的。这意味着您在函数成功 启动 时获得成功,而不是在它完成后返回。
截至撰写本文时,AWS Lambda 尚未提供同步调用函数的方法,将函数的信息直接返回给调用者。然而,这似乎是一个普遍的要求,亚马逊已公开表示他们正在考虑该功能。
正如 Eric 所提到的,目前 Lambda 不为 运行 函数及其结果 return 提供 REST 端点,但将来可能会。
现在,您最好的选择是使用像 lambdaws 这样的库,它为您包装函数部署和执行并通过 SQS 队列处理 returning 结果。如果您想通过推出自己的解决方案来获得更多控制权,过程很简单:
- 创建 SQS 队列
- 让您的 Lambda 函数将其结果写入此队列
- 在您的客户端中,轮询队列以获取结果
我正在使用来自 AWS 控制台的测试功能:
console.log('Loading event');
exports.handler = function(event, context) {
console.log('value1 = ' + event.key1);
console.log('value2 = ' + event.key2);
console.log('value3 = ' + event.key3);
context.done(null, 'Hello World'); // SUCCESS with message
};
并在nodejs中调用如下:
var params = {
FunctionName: 'MY_FUNCTION_NAME', /* required */
InvokeArgs: JSON.stringify({
"key1": "value1",
"key2": "value2",
"key3": "value3"
})
};
lambda.invokeAsync(params, function(err, data) {
if (err) {
// an error occurred
console.log(err, err.stack);
return cb(err);
}
// successful response
console.log(data);
});
一切正常:
//Console Output
{ Status: 202 }
但我也期待收到来自 context.done(null, 'Message') 的消息...
知道如何接收消息吗?
您正在调用 invokeAsync,因此您的 Lambda 函数是 运行 异步的。这意味着您在函数成功 启动 时获得成功,而不是在它完成后返回。
截至撰写本文时,AWS Lambda 尚未提供同步调用函数的方法,将函数的信息直接返回给调用者。然而,这似乎是一个普遍的要求,亚马逊已公开表示他们正在考虑该功能。
正如 Eric 所提到的,目前 Lambda 不为 运行 函数及其结果 return 提供 REST 端点,但将来可能会。
现在,您最好的选择是使用像 lambdaws 这样的库,它为您包装函数部署和执行并通过 SQS 队列处理 returning 结果。如果您想通过推出自己的解决方案来获得更多控制权,过程很简单:
- 创建 SQS 队列
- 让您的 Lambda 函数将其结果写入此队列
- 在您的客户端中,轮询队列以获取结果