Node.js AWS Lambda在返回调用或超时之前完成
我只见过一次,但我想了解它背后的原因 我有一个用nodeJS编写的AWS lambda函数,它只是将顶点添加到AWS neptune 这是相关代码Node.js AWS Lambda在返回调用或超时之前完成,node.js,amazon-web-services,aws-lambda,async-await,amazon-neptune,Node.js,Amazon Web Services,Aws Lambda,Async Await,Amazon Neptune,我只见过一次,但我想了解它背后的原因 我有一个用nodeJS编写的AWS lambda函数,它只是将顶点添加到AWS neptune 这是相关代码 module.exports.userSignedUp = (event, context, callback) => { console.log('Event: ', JSON.stringify(event)) console.log('context: ', context) context.callbackWaitsForE
module.exports.userSignedUp = (event, context, callback) => {
console.log('Event: ', JSON.stringify(event))
console.log('context: ', context)
context.callbackWaitsForEmptyEventLoop = false
var dataTmp = JSON.parse(event.Records[0].Sns.Message)
var errorData = {}
var logData = {}
var id
var now = moment()
if (!dataTmp) {
id = shortid.getShortId()
} else {
console.log('dataTmp: ', dataTmp)
id = dataTmp.dupId
updateDoc(dataTmp, callback, logData, errorData)
}
}
async function updateDoc (dataTmp, callback, logData, errorData) {
try {
console.log('inside updateDoc function')
console.log('dc', dc)
console.log('g', g)
var userAdded = await g.addV('user').property('userId', dataTmp.userId).property('firstName', dataTmp.firstName).next()
console.log('userAdded', userAdded)
return callback(null)
} catch (e) {
console.log('error', e)
return callback(null)
}
}
此功能的超时设置为20秒。
大多数情况下,该功能工作正常,并在11到50毫秒内返回
这一次,我看到函数在打印第三条console.log语句后停止执行。起初,我认为,lambda可能在等待海王星返回(wait语句),但在这种情况下,lambda应该超时并再次重试
这是cloudwatch的输出
请注意,在最后一个console.log之后,执行结束
INFO g GraphTraversalSource { [+5ms]
graph: Graph {},
traversalStrategies: TraversalStrategies { strategies: [ [RemoteStrategy] ] },
bytecode: Bytecode { sourceInstructions: [], stepInstructions: [] },
graphTraversalSourceClass: [Function: GraphTraversalSource],
graphTraversalClass: [Function: GraphTraversal]
}
REPORT Duration: 42.51 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 103 MB [+46ms]
lambda的通常输出如下所示
g GraphTraversalSource { [+4ms]
graph: Graph {},
traversalStrategies: TraversalStrategies { strategies: [ [RemoteStrategy] ] },
bytecode: Bytecode { sourceInstructions: [], stepInstructions: [] },
graphTraversalSourceClass: [Function: GraphTraversalSource],
graphTraversalClass: [Function: GraphTraversal]
}
2 hours ago INFO userAdded { [+46ms]
value: Vertex {
id: '9cb979cb-427e-97d2-f265-fee7b8b94780',
label: 'user',
properties: undefined
},
done: false
}
REPORT Duration: 43.74 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 103 MB [+47ms]
关于这里可能发生的事情以及为什么lambda会在超时之前返回的任何想法
感谢可能是由于Lambda未能将日志发送到CloudWatch造成的。还要检查指标,看看当时是否出现了函数错误?它再次发生,我看不出有错误。您能否尝试添加X射线跟踪以了解不同请求的情况?这可能会提供一些线索。可能是由于Lambda未能将日志交付给CloudWatch造成的。还要检查指标,看看当时是否出现了函数错误?它再次发生,我看不出有错误。您能否尝试添加X射线跟踪以了解不同请求的情况?它可以提供一些线索。