如何在 AWS Step Function 中传递选择状态的不同输出?

Rre*_*Cat 3 amazon-web-services aws-lambda aws-step-functions

假设我的 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"
}
Run Code Online (Sandbox Code Playgroud)

假设该状态的输入是:

{
   "value": 0,
   "output1": object1,
   "output2": object2,
}
Run Code Online (Sandbox Code Playgroud)

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

我尝试ChoiceStateX像下面这样修改状态:

"ChoiceStateX": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.value",
      "NumericEquals": 0,
      "OutputPath": "$.output1",
      "Next": "ValueIsZero"
    }
  ],
  "Default": "DefaultState"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到下一个错误:Field OutputPath is not support。

如何才能实现这个功能呢?

PS:目前我正在 ChoiceStateX 和 ValueIsZero/DefaultState 之间使用“代理”状态来修改输出。

我检查过:

但还没有找到解决办法。

Rre*_*Cat 6

看起来不可能OutputPath为一种状态指定不同的状态。

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

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

我的状态输入ChoiceStateX如下所示:

{
   "value": value,
   "output": value==0 ? object1 : object2
}
Run Code Online (Sandbox Code Playgroud)

结束ChoiceStateX状态的最终版本:

"ChoiceStateX": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.value",
      "NumericEquals": 0,
      "Next": "ValueIsZero"
    }
  ],
  "OutputPath": "$.output",
  "Default": "DefaultState"
}
Run Code Online (Sandbox Code Playgroud)

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