Дождитесь окончания функции до 1000 *, используя AWS лямбду внутри другой лямбды - PullRequest
0 голосов
/ 15 апреля 2020
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
    region: 'us-west-2' //change to your region
});

lambda.invoke({
    FunctionName: 'my-function',
    Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
    if (error) {
        context.done('error', error);
    }
    if(data.Payload){
        context.succeed(data.Payload)
    }
});

Как мне дождаться, пока приведенный выше код завершится sh, прежде чем запускать приведенный ниже код.

Также я хотел бы знать, не прошел ли код выше.

const response = {
    statusCode: 200,
    body: JSON.stringify('2 Lambda Done'),
};
return response;

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Предыдущий вопрос с ответами, которые помогут: Может ли AWS Лямбда-функция вызвать другую

В двух словах:

Более масштабируемый подход, и чаще всего в AWS используется SNS, и обычно вы обнаружите, что люди рассматривают один лямбда-вызов другой как анти-шаблон, поскольку время выполнения первой лямбды должно включать время выполнения второго lambda.

Если вы выставляете счет за две лямбды одновременно, почему бы не использовать вторую часть первой или использовать подход SNS. Вы бы Lambda1 отправили бы любую полезную нагрузку в SNS, и тогда он вызвал бы Lambda2, вместо того, чтобы ваш Lambda1 обрабатывал какую-то функцию после ответа, ваш Lambda2 обработал бы любой «успех» или «сбой» операция вам нужно или вызвать другой SNS, чтобы справиться с этим.

Или, наконец, вы можете использовать пошаговые функции.

С другой стороны, мне нравится эта запись в блоге, в которой обсуждается другая теория: https://winterwindsoftware.com/call-lambda-function-from-another/

0 голосов
/ 15 апреля 2020

В случае синхронного вызова вам не нужно делать ничего особенного. Вы просто вызываете одну лямбда-функцию изнутри другой. В этом случае ваша вызывающая функция будет ожидать завершения вызываемой функции. Выходные данные будут предоставлены в объекте response.

Для асинхронного вызова требуется перепроектирование ваших текущих функций. Поскольку в вашем вопросе не указано, что вы заинтересованы в асинхронном вызове, нет особого смысла предоставлять дополнительную информацию об этом, поскольку от вас потребуется более подробная информация, чтобы дать краткий ответ.

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