You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Step Functions:sfn.ListExecutions无法正确显示运行中执行实例

Step Functions执行实例停止后显示不一致的原因分析

问题场景

我用Go代码实现了停止某状态机所有RUNNING执行实例的功能,代码如下:

func stopAllExecutions(sfnSvc *sfn.SFN, stateMachineArn string) error {
    var nextToken *string
    // Since ListExecutionsInput only supports up to 1000 results per query, create loop to delete all executions
    for {
        executionsInput := &sfn.ListExecutionsInput{
            StateMachineArn:    aws.String(stateMachineArn),
            MaxResults:         aws.Int64(1000),
            NextToken:          nextToken,
            StatusFilter:       aws.String("RUNNING"),
        }
        executions, err := sfnSvc.ListExecutions(executionsInput)
        if err != nil {return err}
        for _, execution := range executions.Executions {
            if *execution.Status == "RUNNING" {
                _, err := sfnSvc.StopExecution(&sfn.StopExecutionInput{
                    ExecutionArn: execution.ExecutionArn,
                })
                if err != nil {
                    return err
                }
            }
        }

        // If NextToken is not set, there are no more results to retrieve
        if executions.NextToken == nil {
            break
        }
        nextToken = executions.NextToken
    }
    return nil
}

运行代码后无报错,立即再次执行代码时显示没有RUNNING实例,AWS控制台也看不到相关执行;但执行AWS CLI命令:

aws stepfunctions list-executions --state-machine-arn $STATE_MACHINE_ARN --status-filter RUNNING --output text

仍显示有数千个RUNNING状态的执行实例。

更奇怪的是,等待30分钟以上后,Go代码又能看到这些执行实例并执行停止操作,但CLI依旧显示它们处于RUNNING状态。

原因分析

  • 最终一致性机制导致状态同步延迟
    AWS Step Functions采用最终一致性架构,调用StopExecution后,控制平面(SDK/控制台)会立即标记状态变更,但数据平面(CLI依赖的底层查询存储)的状态同步存在延迟,尤其是大量执行实例批量操作时,同步周期会被拉长。

  • ListExecutions接口的查询差异
    Go SDK和CLI调用的ListExecutions接口虽为同一接口,但可能因请求路由到不同的服务分区,部分分区的状态更新未及时完成。30分钟后分区缓存失效或同步完成,SDK才能再次获取到这些实例;而CLI可能使用了更久的缓存策略,导致状态迟迟未更新。

  • StopExecution的异步处理特性
    StopExecution是异步操作,调用成功仅代表请求被接受,实际停止执行的后台处理可能因队列积压延迟完成,部分实例的状态变更未及时写入查询存储,从而出现SDK/控制台与CLI的显示差异。

  • 异常状态实例的巡检同步
    部分执行实例可能因网络波动、服务内部错误导致停止操作未完全生效,处于"僵尸"RUNNING状态。30分钟后Step Functions的内部巡检机制检测到这些实例,将状态同步到可查询存储,此时SDK才能再次获取并尝试停止。

解决建议

  • 批量停止后增加5-10分钟等待时间,再重复执行停止逻辑,确保所有实例被处理。
  • 调用StopExecution后,通过DescribeExecution接口单独验证实例状态,避免依赖ListExecutions的结果。
  • 在代码中增加日志,记录每个分页处理的执行实例数量,排查是否存在遗漏。
  • 若问题持续,提交AWS工单让官方排查后台状态同步异常。

内容的提问来源于stack exchange,提问作者Charmander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:56:26