我不小心将一些 Java 代码部署到 AWS Lambda 中,其中包含以下明显有问题的 getter:
public String getLocation() {
return this.getLocation();
}
Lambda 函数配置了 15 秒和 320 Mo 的限制。它由 DynamoDB 流触发。部署有问题的代码后,我在 22 小时 17 左右修改了我的 DynamoDB 表,因此执行了代码。我检查了日志,正如您从前面的函数中所期望的那样,我遇到了一个经典的 StackOverflowError 和一个很长的堆栈跟踪。但是,令我惊讶的是,这并没有停止继续执行并报告更多堆栈溢出错误(CloudWatch 中的日志)的函数。当我意识到即使在 15 秒限制之后该功能也不会停止时,我更加担心。我找不到任何手动停止它的方法,所以我只是在 22h30 左右从 Lambda 控制台中删除了它,最终杀死了它。
此外,我确信我没有触摸我的 DynamoDB 表(也没有其他人可以访问它),也没有尝试以任何其他方式执行 Lambda 函数。它为什么一直执行几分钟,直到我删除它?我当然应该更加小心并首先进行一些本地预测试,但是持续时间限制不是应该保证一旦达到就不会执行任何事情吗?
谢谢您的帮助。