从另一个lambda函数调用的AWS lambda函数的响应始终为null

时间:2018-07-04 22:12:44

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

我有两个lambda函数,我需要从名为sendHealthData的函数中调用名为receiveHealthData的函数。我正在使用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'}

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

我仅获得一次预期的响应:当我更改sendHealthData函数的超时时。但是奇怪的是我将其更改为较小的值。那是10,我将其更改为6。

1 个答案:

答案 0 :(得分:2)

问题是您将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!"
  });
}