kinesis.putRecord
- это асинхронная операция, которая вызывает функцию обратного вызова (второй параметр), когда она завершена (успешно или с ошибкой).
async
функция - это функция, которая возвращает обещание. Лямбда завершит свое выполнение, когда это обещание будет выполнено, даже если есть другие асинхронные операции, которые еще не выполнены.
Так как ваша функция ничего не возвращает, то обещание немедленно разрешается, когда функция завершается, и поэтому выполнение будет немедленно завершено - без ожидания вашей асинхронной kinesis.putRecord
задачи.
При использовании обработчика async
вам не нужно вызывать обратный вызов. Вместо этого вы возвращаете то, что хотите, или выкидываете ошибку. Лямбда получит это и ответит соответственно.
Итак, у вас есть 2 варианта:
- Поскольку в вашем коде нет
await
, просто удалите async
. В этом случае Lambda ожидает, что цикл событий будет emtpy ( Если вы явно не измените context.callbackWaitsForEmptyEventLoop )
- Измените
kinesis.putRecord
на что-то вроде:
let result;
try {
result = await kinesis.putRecord(kinesisParams).promise();
} catch (err) {
console.log("putRecord Error:", JSON.stringify(err));
throw Error(formatResponse(500, "Internal Error: " + JSON.stringify(err));
}
console.log("putRecord Success:", JSON.stringify(result));
return formatResponse(200);
Во втором варианте лямбда будет работать до тех пор, пока kinesis.putRecord
не будет завершен.
Для получения дополнительной информации о поведении Lambda в этом случае, вы можете увидеть основной код, который выполняет ваш обработчик в /var/runtime/node_modules/awslambda/index.js
в контейнере Lambda.