2016-04-15 4 views
2

Я запускаю функцию AWS Lambda для обработки изображений и видео с помощью Node 4.3 as a runtime. Я вызываю свою функцию из моего кода webapp с узлом aws-sdk.Функция AWS Lambda invoke не всегда возвращает

Проблема в том, что, когда функция занимает много времени (например, 250 секунд), обратный вызов вызова никогда не принимается, хотя я могу четко видеть в журналах aww cloudwatch правильную работу функции. Кроме того, функция повторно запускается по крайней мере дважды (это, вероятно, связано с параметром maxRetries из вызова: поскольку он не получает ответ, он повторяет попытку).

Что меня смущает, так это то, что он работает для более быстрых функций, и моя функция лямбда никогда не выйдет из строя. У кого-то есть такая проблема? Может ли это быть связано с новой версией 4.3? Обратите внимание, что я опускаю context.succeed() или context.fail(), поскольку он больше не требуется, но я попытался с ним, и это ничего не меняет.

Lambda код

... 
var handler = function (event, context, callback) { 
    // video/image processing code 
    // 
    // callback function 
    ..., function(err, result) { 
     if (err) { 
      console.log("Error", err, err.stack); 
      callback(err); 
     } else { 
      console.log("Done"); 
      callback(null, result); 
     } 
    } 
}; 

Lambda Призвание

var lambda = new AWS.Lambda; 

var myEventObject = {...}; 
var payload = JSON.stringify('myEventObject'); 

var params = { 
    FunctionName: 'myLambdaFunction' 
    InvocationType: 'RequestResponse', 
    LogType: 'None', 
    Payload: payload 
}; 

lambda.invoke(params, function(err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

Lambda CloudWatch Вход

REPORT RequestId: xxx Duration: 206757.82 ms Billed Duration: 206800 ms Memory Size: 1536 MB Max Memory Used: 354 MB 
+0

Я подозреваю, что тайм-аут для sdk составляет 240 секунд, что может объяснить, что вы получаете повтор. Не могли бы вы попытаться изменить эту конфигурацию внутри вас? – Tom

+0

Нет конфигурации тайм-аута с максимальным значением: 300 секунд. Если он выходит за 300 секунд, функции выходят из строя, и я вижу это в журналах cloudwatch. Если я установил тайм-аут на меньшее значение, скажем, 30 секунд, функция вернется с ошибкой таймаута, и я поймаю ошибку обратного вызова. –

+2

обратите внимание, что я не говорю о тайм-ауте лямбда, но о том, что из конфигурации sdk, так? – Tom

ответ

4

s, указанный в комментариях, aws sdk имеет собственную настройку конфигурации тайм-аута, которая по умолчанию установлена ​​на 120 секунд (это другой параметр тайм-аута, чем лямбда-код).

в текущем случае, поскольку лямбда работает для этого таймаута, sdk принимает неудачные попытки и запускает повторные попытки.

Установка этой конфигурации на 300 секунд должна решить проблему. Как показал Даниэль Т. в комментарии, временное изменение этого может быть достигнуто следующим образом: var lambda = new AWS.Lambda ({httpOptions {timeout: 300000}});

Смежные вопросы