Время ожидания AWS Lambda после успешного запуска - PullRequest
0 голосов
/ 25 июня 2019

Я создал лямбда-функцию Node.js для AWS, используя инфраструктуру Serverless для увеличения различных счетчиков в базе данных Postgres на основе параметров событий.Сама функция запускается без каких-либо ошибок при вызове с serverless invoke local, она работает и работает, как и ожидалось, однако, при вызове из Java, в то время как она должна завершиться и вернуться, она просто отключается.

Я пробовалнесколько вещей, в том числе ожидание закрытия пула Postgres, увеличение времени ожидания, возврат с помощью функции обратного вызова (что, тем не менее, является хорошей практикой, так как становится более ясно, что функция заканчивается там), и использование цепочек обещаний вместо async-await,без удачиНа самом деле вопрос в том, как это работает, и мне всегда нужно добавлять callbackWaitsForEmptyEventLoop(false) или есть более элегантное решение?Я даже попробовал пакет «почему работает узел», и в нем говорится, что 4 дескриптора поддерживают выполнение процесса: TCPWRAP, Timeout и два объекта TickObject.Я почти уверен, что это вызвано node-postgres, так как я создал несколько лямбда-функций, страдающих от одной и той же проблемы.

// These are the last lines of the handler function
const insertQueries = [ 
    // Multiple queries using a node-postgres pool, e.g.
    // pool.query(...);
];

try {
    await Promise.all(insertQueries);
} catch(err) {
    return callback('Couldn\'t insert API stats: ' + err);
}

return callback(null, 'API stats inserted successfully!');

AWS Java SDK выводит только сообщение об отладке, сообщающее, что время выполнения задачи истекло после 10.01секунд (serverless.yml имеет 10 секунд).

...