Pab*_*ola 2 java amazon-web-services aws-lambda aws-step-functions
我有一个 AWS Lambda 函数,当它出现特定错误时,我需要终止它的上下文,因为如果上下文与上次调用相同,再次调用该错误将使 Lambda 函数无法正常工作。
根据我的理解,如果我抛出一个新的,RuntimeException它应该杀死上下文,但它并没有这样做。
知道如何从代码内部杀死上下文吗?
public class IncorrectFileExtensionException
extends RuntimeException {
public IncorrectFileExtensionException(String errorMessage, Throwable err) {
super(errorMessage, err);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道 Lambda 函数上下文没有被破坏/杀死,因为在我下次调用它时抛出该自定义运行时异常后,它使用相同的上下文,我可以确认这一点,因为它使用相同的 CloudWatch 日志流并且不再执行冷启动。
我需要实现的是杀死该调用的 Lambda 函数上下文,并使其在下次冷启动时启动。
您无法通过控制台/api 或从函数内部手动终止执行环境(lambda 实例)。
从代码中抛出异常(或将错误传递给回调(e))只会产生一个调用错误,该错误会在cloudwatch中记录和报告。没有办法抛出“致命”错误,AWS 不会为您区分函数错误。相同的执行环境将被重复使用,直到它闲置一段不确定的时间或 aws 决定因其他原因终止它为止。对于函数超时也是如此。
因此,您主要关心的应该是确保错误不会使您的函数代码进入不可恢复的状态。Lambda 调用至少在函数结果不应该依赖于执行环境状态的意义上是幂等的。
也就是说,当事情变得混乱时,你可以使用一些技巧。
2 和 3 的明显问题是,在负载下的实际环境中,这会导致大量的冷启动损失,因为突然没有热执行环境来处理请求。
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |