Я пытаюсь обработать загруженный файл в S3. Поскольку getObject заканчивается как основная задача, заканчивается до завершения обработки, а AWS убивает лямбда за 3-4 секунды.
Хуже того, метод обработки также имеет асинхронные операции в нем - он делает http-вызовы.
На высоком уровне мой код выглядит так:
exports.handler = function(event, context) {
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
...
} else {
processFile(data.Body.toString(), 0);
console.log("ok");
}
});
//need to wait here till processFile is done
};
processFile = function(content, start) {
... build url to call
http.get(url, function(res) {
console.log("Got response: " + res.statusCode + ");
processFile(content, start + 1);
});
}
Я узнаю, что в nodejs существует async, но он не включен amazon; Оба требуют ( "async" ) или требуют ( "сон" ) вызывает ошибки.
Время ожидания Lambda настроено на 60 секунд, но оно выйдет через 3-4 секунды.