【问题标题】:Return data from async AWS Lambda从异步 AWS Lambda 返回数据
【发布时间】:2016-11-25 13:41:39
【问题描述】:

如何将数据从作为事件调用的 lambda 中取回给调用函数?

基本上我拥有的 lambda 函数是:

exports.handler = function(event, context, callback) {
    var data = {};
    data.foo ='hello';
    callback(null, data)
}

调用函数如下所示:

var AWS = require('aws-sdk');

var lambda = new AWS.Lambda();
var params = {
    FunctionName: 'SomeFunction',
    InvocationType: 'Event'
};

lambda.invoke(params, function (err, data) {
    if (err) {
        console.log(err, err.stack); // an error occurred
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});

但是我从函数中得到的唯一结果是

{
  "StatusCode": 202,
  "Payload": ""
}

我认为回调参数的重点是允许调用函数在函数完成时获取数据。是我用错了还是我要求的 Lambdas 不可能?

【问题讨论】:

    标签: node.js amazon-web-services asynchronous aws-lambda


    【解决方案1】:

    当您调用 Lambda 函数时,您需要将 InvocationType 设置为 'RequestResponse' 而不是 'Event'

    当使用 Event 类型时,当 AWS 的服务器接收到负载时调用您的回调。使用 RequestResponse 类型时,只有在 Lambda 函数完成后才会调用您的回调,并且您将收到它提供给其回调的数据。使用Event 类型不可能做你想做的事。

    【讨论】:

    • 不能用'Event'类型做吗?我认为回调参数的重点是让调用函数在完成执行时能够从 lambda 获取数据?
    • 耻辱。 You can use the optional callback to return information to the caller, otherwise return value is null,这听起来像是我可以使用回调来返回调用结果
    • @user2127726 我的意思是,你可以……使用正确的InvocationType。为什么要改变这个问题?
    • RequestResponse 是同步的吧?所以必须有另一个线程来防止阻塞调用一个对吗?只是有些人似乎不喜欢这个额外的步骤
    • @user2127726 不,使用RequestResponse 类型不会使调用同步。
    猜你喜欢
    • 2018-10-05
    • 2020-05-30
    • 2016-05-01
    • 2017-04-27
    • 2017-12-09
    • 2020-03-21
    • 2016-08-11
    • 2015-04-21
    • 2016-12-31
    相关资源
    最近更新 更多