Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么我的NodeJS lambda函数在一次调用中执行多次?_Node.js_Amazon Web Services_Aws Lambda_Serverless Framework - Fatal编程技术网

Node.js 为什么我的NodeJS lambda函数在一次调用中执行多次?

Node.js 为什么我的NodeJS lambda函数在一次调用中执行多次?,node.js,amazon-web-services,aws-lambda,serverless-framework,Node.js,Amazon Web Services,Aws Lambda,Serverless Framework,我有一个作为AWS lambda函数托管的NodeJS脚本。该脚本基本上是从MySQL数据库查询数据 总之,它有一个循环,每个迭代执行一个查询操作。这是等待,然后记录,然后它移动到下一个迭代 当我在本地执行该函数时,这可以正常工作,但是当我在lambda中使用无服务器框架调用它时,相同的异步查询会多次触发,就像在日志中检查的一样。 对于单个调用,AWS cloudwatch中有多个日志流,这表明函数正在多个实例上运行 我已尝试将重试失败次数选项配置为0(默认值为2),但没有帮助。即使捕获所有异步

我有一个作为AWS lambda函数托管的NodeJS脚本。该脚本基本上是从MySQL数据库查询数据

总之,它有一个循环,每个迭代执行一个查询操作。这是等待,然后记录,然后它移动到下一个迭代

当我在本地执行该函数时,这可以正常工作,但是当我在lambda中使用无服务器框架调用它时,相同的异步查询会多次触发,就像在日志中检查的一样。 对于单个调用,AWS cloudwatch中有多个日志流,这表明函数正在多个实例上运行

我已尝试将重试失败次数选项配置为0(默认值为2),但没有帮助。即使捕获所有异步请求并具有无错误日志,它仍然会执行多次,因此它在15分钟的最大持续时间内运行

有人能帮我解决这个问题吗

下面是函数体的代码段
const rundailayaggregation=async()=>{
常数时间=力矩();
常数日期=时刻(时间)。格式('YYYY-MM-DD')
const unixFromTime=时刻(time).startOf('day').unix()
const unixToTime=时刻(time).endOf('day').unix();
let plantList=等待getPlantList();
const aggregateParameterConfig=await GetAggregateParameterConfig()
用于(植物列表的植物ID){
const deviceList=Object.keys(aggregateParameterConfig)
用于(设备列表的let设备){
const deviceParameters=aggregateParameterConfig[设备]
const promises=Object.entries(deviceParameters.map)(异步([parameter,cumulativeType])=>{
让我们重新来过;
试一试{
res=等待执行({
plantId,
装置,
参数
unixFromTime,
唯一时间,
累积类型,
})
}捕获(e){
返回`检索|${plantId}|${device}|${parameter}|${e.message}|${e.code}时出错}`
}
如果(!res | |!res.length)
返回'NO DATA |${plantId}|${device}|${parameter}';
常量arrayToInsert=res.map(({
设备id:deviceId,
…obj
}) => {
返回({
日期,
plantId,
装置,
设备ID,
参数
值:JSON.stringify(obj)
})
})
试一试{
等待插入聚合数据(阵列插入)
}捕获(e){
返回`插入|${plantId}|${device}|${parameter}|${e.message}|${e.code}时出错}`
}
返回`成功插入数据|${plantId}|${device}|${parameter}`
})
const res=等待承诺。全部(承诺)
log(`PLANT-${plantId}DEVICE-${DEVICE}`,JSON.stringify(res,null,2))
}
}

}
使用无服务器框架时,lambda的触发因素是什么?请检查日志中的错误。我猜你的一个承诺会得到回报。它会导致lambda崩溃并重试。@ShahadIshraq它是由from终端通过命令
sls invoke-f
@karjan触发的。我已经检查了日志。我想很少有操作超时错误与sql查询有关,但所有这些错误都被捕获到catch块中并记录下来。除此之外,没有错误。您可以共享日志吗?