我正在阅读 API 文档,其中有一个名为 StopExecution 的操作。
https://docs.aws.amazon.com/step-functions/latest/apireference/API_StopExecution.html
我想知道它有什么作用。是的,当然,它会停止执行,但是如果某个任务正在运行怎么办?它是否像 SWF 那样发送信号来停止任务?或者只是撤销 TaskToken(这样任务就无法发回结果)并让它继续运行?如果任务是 lambda 函数,也会发生同样的情况吗?
我正在考虑这个问题,因为我有一些长时间运行的任务,并且无法在任何地方找到此行为的记录。
我的猜测:它只是发出信号执行已停止并让任务继续运行。当任务调用 SendTaskSuccess 时,它只会收到类似 InvalidToken 的错误。
我做了测试,结果发现 SFN 绝对不会停止正在运行的任务。但是,如果您尝试在停止执行时发送 TaskHeartbeat,它将引发 TaskTimedOut 错误。
我最终做的是验证 SendTaskHeartbeat 的输出,捕获 TaskTimedOut 并继续在工作端取消任务。
注意:SendTaskSuccess/SendTaskFailure 也会发生相同的 TaskTimedOut 错误。
在批处理作业的情况下,它会停止该步骤并使用 exitCode
1
终止作业,原因如下:
Status reason: The Task state in AWS Step Functions execution [arn:aws:states:us-west-2:12345678912:execution:JobStateMachine:00000-c583-2050-f8b1-9d36e05f4266] which was managing this resource was aborted
接受的答案可以追溯到很久以前,但我刚刚发现 AWS 现在也停止了底层任务:
Task stopped at: 2024-04-24T01:23:32.972Z
The Task state in AWS Step Functions execution [execution arn ] which was managing this resource was aborted
因此您应该能够在用户界面中单击“停止执行”,这应该会自动停止任务。
希望这对未来的读者有所帮助👍