Цепная AWS Lambda вызывает оркестровку - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь создать оркестрационную лямбду AWS, которая вызывает две другие лямбды AWS. Эти две другие лямбды AWS могут вызываться по-своему, но в некоторых случаях требуется оркестровка.

Моя лямбда оркестровки выглядит следующим образом:

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 не возникла, поскольку у меня была неверная подпись (все еще использовала обратный вызов, а не обещание). Я обновил фрагменты кода, которые теперь работают правильно.

1 Ответ

0 голосов
/ 22 октября 2019

Просто завершение из комментария:

Проблема была lambdaA и lambdaB используют обратные вызовы, следовательно, вы не можете await их. [Из фрагмента № 1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...