Amazon web services 意外无限循环后AWS Lambda令人担忧的行为

Amazon web services 意外无限循环后AWS Lambda令人担忧的行为,amazon-web-services,aws-lambda,amazon-dynamodb-streams,Amazon Web Services,Aws Lambda,Amazon Dynamodb Streams,我不小心在AWS Lambda中部署了一些Java代码,其中包含以下明显有缺陷的getter: public String getLocation() { return this.getLocation(); } Lambda功能的配置限制为15秒和320个月。它由DynamoDB流触发。部署有问题的代码后,我在22h17附近修改了DynamoDB表,因此执行了代码。我检查了日志,正如您可以从前面的函数中看到的,我有一个经典的StackOverflower错误,具有很长的堆栈跟踪。然而,

我不小心在AWS Lambda中部署了一些Java代码,其中包含以下明显有缺陷的getter:

public String getLocation() {
   return this.getLocation();
}
Lambda功能的配置限制为15秒和320个月。它由DynamoDB流触发。部署有问题的代码后,我在22h17附近修改了DynamoDB表,因此执行了代码。我检查了日志,正如您可以从前面的函数中看到的,我有一个经典的StackOverflower错误,具有很长的堆栈跟踪。然而,我惊讶地发现,这并没有停止函数的运行,该函数一直在执行并报告多个堆栈溢出错误(CloudWatch中的日志)。我更担心的是,当我意识到即使在15秒限制之后,功能也不会停止。我找不到任何方法手动停止它,所以我只是在22h30左右从Lambda控制台删除了它,这最终杀死了它。下图(来自CloudWatch)显示了一段时间内的执行持续时间,您可以看到我在运行bug之前执行的几个测试(运行时间超过10秒),然后是22h17和22h30之间的连续快速运行(大约200毫秒)

另外,我确信我没有触摸我的DynamoDB表(没有其他人可以访问它),也没有尝试以任何其他方式执行Lambda函数。为什么它一直执行了几分钟,直到我删除它?我当然应该更加小心,首先执行一些本地预测试,但是持续时间限制不应该保证一旦达到就不会执行任何操作吗


谢谢你的帮助。

我终于找到了这种行为的根源。据说:

根据事件源,AWS Lambda可能会重试失败的Lambda 功能。例如,如果Amazon Kinesis是 Lambda函数,AWS Lambda将重试失败的函数,直到 Lambda函数成功或流中的记录过期


DynamoDB流的过期延迟为24小时,因此我的函数在此之前只会停止。

哪里有证据表明它在任何一次调用中运行的时间超过15秒?图表以毫秒为单位,因此15秒=15000。看起来它一直在运行,因为它一直被调用,删除它会停止更多的调用。你是对的。问题不在于函数的运行时间超过了15秒,但正如我在消息中所说的,我观察到了几次连续的快速运行,没有任何原因(DynamoDB没有更新,因此流中应该没有任何内容,我也没有尝试以其他方式执行函数)。