DynamoDB вызывает лямбда-тайм-аут
Я испытываю проблему, когда лямбда-функции иногда тайм-аут без какого-либо сообщения об ошибке, кроме уведомления о том, что функция тайм-аут.
Чтобы найти корень проблемы, я добавил ведение журнала в различных точках по всей моей функции и определил, что все функционирует правильно до первого запроса getItem() на чтение данных из DynamoDB. Чтение, кажется, занимает больше, чем 3.00 секундный тайм-аут.
Естественно, я проверил свою таблицу DynamoDB, чтобы посмотрите, не было ли каких-либо дроссельных считываний или ошибок. Показатели DynamoDB не показывают дросселей или ошибок, а время считывания остается в двухзначных миллисекундах самое большее.
Очевидно, что-то идет не так или падает по пути. Как я могу исправить эту проблему или, по крайней мере, поймать ее и повторить чтение?
Это функция, ориентированная на чтение для веб-API, поэтому время отклика имеет решающее значение. Следовательно, увеличенный тайм-аут не решит проблему. вопрос.
dynamodb.getItem({
"TableName": "tablename",
"Key": { "keyname": { "S": "keyvalue" } },
"AttributesToGet": [ "attributeA", "attributeB" ]
}, function(err, data) {
if(err){
context.done(err);
} else {
if("Item" in data){
nextFunction(event, context);
} else {
context.done("Invalid key");
}
}
});
1 ответ:
После значительного увеличения таймаута я обнаружил, что в конечном итоге возникает сетевая ошибка:
{ "errorMessage": "write EPROTO", "errorType": "NetworkingError", "stackTrace": [ "Object.exports._errnoException (util.js:870:11)", "exports._exceptionWithHostPort (util.js:893:20)", "WriteWrap.afterWrite (net.js:763:14)" ] }
Эта проблема, по-видимому, вызвана проблемой между узлами.js и OpenSSL согласно этой нити. Похоже, что проблема затрагивает узел.js 4.x и выше, но не 0.10. Это означает, что вы можете либо решить проблему, понизив лямбда-среду выполнения до узла.js 0.10 или добавление следующего кода при использовании aws-sdk:
new AWS.DynamoDB({ httpOptions: { agent: new https.Agent({ rejectUnauthorized: true, secureProtocol: "TLSv1_method", ciphers: "ALL" }) } });