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

时间:2018-12-14 16:27:54

标签: amazon-web-services aws-lambda aws-step-functions

假设我的“步进功能”的一部分如下所示:

ArrayVec

假设此状态的输入为:

"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。我知道可以在DefaultStateInputPath状态下更改ValueIsZero。但是这种方式对我来说是不可接受的,因为我也从其他一些州调用这些州。

我试图像下面那样修改DefaultState状态:

ChoiceStateX

在这种情况下,我遇到下一个错误:不支持字段OutputPath

如何实现此功能?

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

我已检查:

但尚未找到解决方案。

1 个答案:

答案 0 :(得分:0)

似乎无法为一种状态指定不同的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"
}

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