【发布时间】:2019-10-22 21:13:25
【问题描述】:
我正在尝试创建一个调用其他两个 AWS lambda 的编排 AWS lambda。这两个其他 AWS lambda 可以单独调用,但在某些情况下,需要编排。
我的编排 lambda 如下所示:
module.exports.orchestration = async (event, context, callback) => {
const lambdaAPromise = lambdaA();
const lambdaBPromise = lambdaB();
const lambdaAResponse = await lambdaAPromise;
const lambdaBResponse = await lambdaBPromise;
if (lambdaAResponse && lambdaBResponse) {
console.log(
"Both streams responsed with: ",
lambdaAResponse,
lambdaBResponse
);
var orchestrationResponse = [];
orchestrationResponse.push(lambdaAResponse);
orchestrationResponse.push(lambdaBResponse);
const orchestrationSucceeded = {
statusCode: 200,
isBase64Encoded: false,
body: orchestrationResponse
};
callback(null, orchestrationSucceeded);
} else {
console.log(
"At least one stream not responded: ",
lambdaAResponse,
lambdaBResponse
);
const orchestrationFailed = {
statusCode: 400,
isBase64Encoded: false,
body: someresponse
};
callback(null, orchestrationFailed);
}
};
function lambdaA() {
var payload = {
groupNumber: requestBody.groupNumber
};
var params = {
FunctionName: process.env.CCE_FUNCTION_NAME,
InvocationType: "RequestResponse",
LogType: "Tail",
Payload: JSON.stringify(payload)
};
return lambda
.invoke(params)
.promise()
.then(({ Payload }) => {
var payload = JSON.parse(Payload);
return payload.body;
});
}
function lambdaB() {
var payload = {
groupNumber: requestBody.groupNumber
};
var params = {
FunctionName: process.env.CCE_FUNCTION_NAME,
InvocationType: "RequestResponse",
LogType: "Tail",
Payload: JSON.stringify(payload)
};
return lambda
.invoke(params)
.promise()
.then(({ Payload }) => {
var payload = JSON.parse(Payload);
return payload.body;
});
}
lambdaA 和 lambdaB 函数都如下所示:
module.exports.lambdaA = (event) => {
return new Promise((resolve) => {
do something ...
resolve(boolean value);
});
};
我的问题是 await 函数没有发生,因为我的签名不正确(仍在使用回调而不是承诺)。我已经更新了现在可以正常工作的代码 sn-ps。
【问题讨论】:
-
在编排 lambda 调用时应该考虑步进函数
-
是的,这是一种方法,但我仍然想了解为什么我的编码没有像我想象的那样工作。
-
好吧,从第一个代码 sn-p(不知道第二个 sn-p 的作用),你的
lambdaA和lambdaB使用回调,因此你不能await他们 -
@LostJon,这就是问题所在,我有一个仍在调用回调的无效签名。感谢您发现我的错误。
标签: node.js amazon-web-services promise aws-lambda