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

在Step Function中过滤输入数组并分流至不同状态的实现问询

问题:如何根据状态分流数组条目并跳转不同状态?

给定如下输入数组,能否将状态为FAILED的条目分流到一个状态,SUCCESS的条目分流到另一个状态?

[
  {
    "Status": "SUCCESS",
    "Stack": "metadata"
  },
  {
    "Status": "FAILED",
    "Stack": "metadata-roles"
  },
  {
    "Status": "FAILED",
    "Stack": "master-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "appstream-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "capability-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "action-storage"
  },
  {
    "Status": "SUCCESS",
    "Stack": "domain-action-storage"
  },
  {
    "Status": "FAILED",
    "Stack": "auth0-clients"
  },
  {
    "Status": "FAILED",
    "Stack": "ecr-repository"
  },
  {
    "Status": "FAILED",
    "Stack": "ecr-replication"
  }
]

我考虑用Choice状态,但不确定是否支持这个功能。需求如下:

  • 若所有条目都是SUCCESS,则跳转至All succeed状态
  • 若存在至少一个FAILED条目,则跳转至Partially succeed状态,最好能把失败条目带入这个状态,不过这不是强制要求

解决方案

完全可以用Choice状态实现这个需求,步骤如下:

1. 筛选失败条目(可选,用于携带失败数据)

先通过Filter状态(以AWS Step Functions这类工作流服务为例)从输入数组里把所有Status为FAILED的条目筛选出来,存到$.FailedStacks路径下,后续跳转时就能直接拿到失败数据。

配置示例:

{
  "Type": "Filter",
  "InputPath": "$",
  "ItemsPath": "$",
  "ResultPath": "$.FailedStacks",
  "Filter": {
    "Variable": "$.Status",
    "StringEquals": "FAILED"
  }
}

如果不需要携带失败数据,这一步可以跳过,直接用Choice状态判断原数组中是否存在FAILED条目即可。

2. 用Choice状态做分支判断

接下来配置Choice状态,根据筛选出的失败条目数量做分支:

  • 当$.FailedStacks的长度大于0时,说明存在失败条目,跳转到Partially succeed状态,此时$.FailedStacks里就是所有失败的栈信息
  • 当长度为0时,说明全部成功,跳转到All succeed状态

配置示例:

{
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.FailedStacks.length",
      "NumericGreaterThan": 0,
      "Next": "Partially succeed"
    }
  ],
  "Default": "All succeed"
}

3. 分流SUCCESS条目(可选)

如果需要单独处理SUCCESS条目,同样可以用Filter状态筛选出Status为SUCCESS的条目,存到$.SuccessStacks,在对应状态中使用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24