我有两个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。
答案 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!"
});
}