Я сталкиваюсь со странным поведением, когда запускаю Lambda с Node v12. Эта лямбда запускается правилом события cloudwatch.
Его целью является выполнение определенной операции, а затем перепланирование правила, которое будет вызвано после определенного c периода (например, 5 минут).
exports.handler= async function (event, context, callback) {
console.info('Hello world');
let nextValue = moment().add(5, 'minutes');
let cronValue = `cron(${nextValue .minutes()} ${nextValue .hours()}
${nextValue .date()} ${nextValue .month() + 1} ? ${nextValue .year()})`;
let putRuleParams = {
Name: RuleName,
Description: `Rechedule event`,
ScheduleExpression: cronValue,
};
console.info(`Updating rule ${RuleName}. Params: `, putRuleParams);
cloudwatchevents.putRule(putRuleParams, function(err, data) {
if (err) {
console.error('Error updating rule', err);
} else {
console.info('Successfully updated rule', data);
}
});
console.info('After execution');
}
Вывод следующий:
2020-01-31T14:19:07.749Z 97c23991-7710-4d98-accd-943b470d0875 INFO Updating rule fiv-
loadpartitions_rule. Params: {
Name: 'dummy_rule',
State: 'DISABLED',
Description: 'Scheduled on 31-01-2020 14:24 +00:00 to load partitions for generic_amount_tb
table.',
ScheduleExpression: 'cron(24 14 31 1 ? 2020)'
}
2020-01-31T14:19:07.751Z 97c23991-7710-4d98-accd-943b470d0875 INFO After execution
END RequestId: 97c23991-7710-4d98-accd-943b470d0875
REPORT RequestId: 97c23991-7710-4d98-accd-943b470d0875 Duration: 15639.87 ms Billed Duration:
15700 ms Memory Size: 1536 MB Max Memory Used: 101 MB Init Duration: 398.67 ms
Как вы можете видеть, обработчик обратного вызова правила обновления не выполняется, так как выполнение функции заканчивается до завершения события. А в правиле AWS обновление отсутствует. Как я могу сказать Лямбде подождать, пока событие не будет завершено?