I am experiencing an issue where Lambda functions occasionally time out without any error message other than a notification that the function timed out.
In order to find the root of the issue, I added logging at various points throughout my function and determined that everything functions properly until the first getItem() request to read data from DynamoDB. The read seems to be taking more than the 3.00 second timeout.
Naturally, I checked my DynamoDB table to see if there were any throttled reads or errors. DynamoDB's metrics show no throttles or errors, and read times remain in the double-digit milliseconds at most.
Clearly something is going wrong or getting dropped along the way. How can I fix this issue or at least catch it and retry the read?
This is a read-oriented function for a web API, so response times are critical. Hence, an increased timeout will not solve the issue.
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");
}
}
});
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…