如何从 AWS Step Function 中的 Choice 状态传递不同的输出?

How to pass different output from Choice state in AWS Step Function?

假设我的 Step Function 的一部分如下所示:

"ChoiceStateX": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.value",
      "NumericEquals": 0,
      "Next": "ValueIsZero"
    }
  ],
  "Default": "DefaultState"
},
"ValueIsZero": {
  "Type" : "Task",
  "Resource": "arn:aws:lambda:******:function:Zero",
  "Next": "NextState"
},
"DefaultState": {
  "Type" : "Task",
  "Resource": "arn:aws:lambda:******:function:NotZero",
  "Next": "NextState"
}

假设此状态的输入是:

{
   "value": 0,
   "output1": object1,
   "output2": object2,
}

我的问题是我必须将 output1 传递给 ValueIsZero 状态,并将 output2 传递给 DefaultState。我知道可以在 ValueIsZeroDefaultState 状态下更改 InputPath。但是这种方式对我来说是不可接受的,因为我也从其他一些州打电话给这些州。

我尝试修改 ChoiceStateX 状态如下:

"ChoiceStateX": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.value",
      "NumericEquals": 0,
      "OutputPath": "$.output1",
      "Next": "ValueIsZero"
    }
  ],
  "Default": "DefaultState"
}

在这种情况下我遇到下一个错误:不支持字段输出路径

如何实现此功能?

PS: 目前我正在使用 ChoiceStateX 和 ValueIsZero/DefaultState 之间的 'proxy' 状态修改输出。

我检查过:

但还没有找到解决办法。

似乎无法为一个州指定不同的 OutputPath

代理状态的解决方案看起来不太优雅。

我已经在ChoiceStateX之前的状态下用另一种方式解决了这个问题。我在 output 属性 中设置不同类型的实例,并且只在 ChoiceStateX 状态下路由它。

我的 ChoiceStateX 状态输入如下:

{
   "value": value,
   "output": value==0 ? object1 : object2
}

结束 ChoiceStateX 状态的最终版本:

"ChoiceStateX": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.value",
      "NumericEquals": 0,
      "Next": "ValueIsZero"
    }
  ],
  "OutputPath": "$.output",
  "Default": "DefaultState"
}

它仍然不完美,因为我在两个地方实现了相同的逻辑。