Step Functions精细化取消方案:如何无需完全退出即可取消状态机执行
Step Functions 优雅取消+保留清理逻辑实现方案
原生 Step Functions 提供的 StopExecution API 默认会直接终止全流程执行,不会触发预先配置的故障路径清理逻辑,你可以通过以下两种成熟方案实现需求:
方案1:自定义取消标志位轮询(最通用)
- 提前创建一张 DynamoDB/业务数据库表,存储状态机执行 ARN 与对应的取消状态,新增
cancel_requested布尔字段,默认值为false - 在状态机所有长耗时步骤、分支入口前新增状态判断节点,查询当前执行 ARN 对应的
cancel_requested字段:- 字段值为
true时,主动抛出CancellationRequested自定义错误 - 字段值为
false时,继续执行原有业务逻辑
- 字段值为
- 在状态机顶层配置 Catch 规则,匹配
CancellationRequested错误后直接路由到已有的故障清理路径,清理完成后正常结束执行 - 需要取消执行时,无需调用原生终止接口,仅需将对应执行 ARN 的
cancel_requested字段置为true即可,状态机走到下一个判断节点就会主动触发清理流程
提示:如果状态机包含长时长 Wait 状态,可将单段长等待拆分为「短等待+取消判断」的循环结构,避免等待期间无法响应取消请求
方案2:任务主动上报取消(适配长耗时任务场景)
- 针对使用 Activity、支持心跳的 Lambda 等任务类型,开启心跳超时配置
- 任务执行端内置取消状态查询逻辑,收到取消需求后,停止业务处理并主动调用
SendTaskFailureAPI上报CancellationRequested错误,触发上层状态机的清理路径 - 该方案无需在状态机中插入大量判断节点,更适配任务侧代码可控的场景
补充说明
- 原生
StopExecution接口支持ROLLBACK终止模式,仅适用于配置了专属回滚步骤的状态机,适配成本高于上述自定义方案,可根据自身业务结构选择 - 上述方案仅适用于标准工作流(Standard Workflow),Express 工作流不支持中间状态持久化,无法实现优雅取消逻辑
内容的提问来源于stack exchange,提问作者men6288
相关产品推荐
相关产品推荐

