【问题标题】:Response from AWS lambda function called from another lambda function is always null从另一个 lambda 函数调用的 AWS lambda 函数的响应始终为空
【发布时间】:2018-12-13 08:16:27
【问题描述】:

我有两个 lambda 函数,我需要从一个名为 receiveHealthData 的函数中调用一个名为 sendHealthData 的函数。我正在使用 Node.JS 8.10 和 Serverless 框架。

这是receiveHealthData的代码:

const env = process.env;
const aws = require("aws-sdk");
const Lambda = new aws.Lambda();
const S3 = new aws.S3();

exports.main = (event, context, callback) => {

    const params = {
        FunctionName: "sendHealthData",
        InvocationType: "RequestResponse",
        Payload: JSON.stringify(event)
    }

    Lambda.invoke(params, function(error, remainingHealthData) {

        if (error) {

            reject(error);
        }
        else {

            console.log("Remaining: " + remainingHealthData["Payload"]);

            if (!remainingHealthData["Payload"]) {

                reject(new Error("Payload is null"));
            }  
            else {

                resolve(remainingHealthData);
            }
        }
    });
}

这是sendHealthData

exports.main = async (event, context, callback) => {

    callback(null, "Sent Health Data!");
}

remainingHealthData["Payload"] 每次都为空。

console.log(JSON.stringify(remainingHealthData)) 的输出是:

{"StatusCode":200,"Payload":'null'}

当我通过 serverless invoke --function sendHealthData 调用 sendHealthData 时,我得到了预期的结果:“已发送健康数据!”

我只得到了一次预期的响应:当我更改 sendHealthData 函数的超时时。但奇怪的是我把它改成了更小的值。原来是 10,我把它改成了 6。

【问题讨论】:

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


    【解决方案1】:

    问题是您将RequestResponse 用作InvocationType,但您的sendHealthData AWS Lambda 没有返回有效的JSON(只是一个字符串)。

    documentation 中的一小段引述说:

    有效负载——(缓冲区、类型化数组、Blob、字符串)

    它是 Lambda 函数返回的对象的 JSON 表示形式。仅当调用类型为 RequestResponse 时才存在。

    因此,只要您将 sendHealthData AWS Lambda 的返回值更改为以下值,它就会按预期工作:

    exports.main = async (event, context, callback) => {
      callback(null, {
        "message": "Sent Health Data!"
      });
    }
    

    【讨论】:

    • 感谢您的回复。我试着按照你说的做,但我继续得到奇怪的结果。例如:在我部署函数并运行它之后,我得到了正确的结果。如果我在第一次之后立即尝试第二次运行它,我得到的响应是 0;
    猜你喜欢
    • 2018-05-19
    • 2019-06-28
    • 2018-06-09
    • 2022-12-05
    • 2018-08-21
    • 2021-09-23
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多