【问题标题】:Chained AWS Lambda calls in an orchestration编排中的链式 AWS Lambda 调用
【发布时间】: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 的作用),你的 lambdaAlambdaB 使用回调,因此你不能 await 他们
  • @LostJon,这就是问题所在,我有一个仍在调用回调的无效签名。感谢您发现我的错误。

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


【解决方案1】:

刚刚结束评论:

问题是lambdaAlambdaB 使用回调,因此您不能await 他们。 [来自片段 #1]

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2019-07-18
    • 2019-07-26
    • 2016-02-04
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多