如何从 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
。我知道可以在 ValueIsZero
和 DefaultState
状态下更改 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"
}
它仍然不完美,因为我在两个地方实现了相同的逻辑。
假设我的 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
。我知道可以在 ValueIsZero
和 DefaultState
状态下更改 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"
}
它仍然不完美,因为我在两个地方实现了相同的逻辑。