【问题标题】:Can AWS Step Function describe this kind of dataflow?AWS Step Function 可以描述这种数据流吗?
【发布时间】:2019-09-28 02:58:37
【问题描述】:

不能在 AWS Step Function 中用Parallel State 来描述。

B 和 C 应该是平行的。

C 向 D 和 E 发送消息。

D 和 E 应该是平行的。

【问题讨论】:

  • 哪些需要并行运行?
  • 你会使用choice
  • @HoratiuJeflea B 与 C 并行,D 与 E 并行
  • @LostJon 我想调用两个后继者。

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


【解决方案1】:

{
    "StartAt": "A",
    "States": {
        "A": {
            "Type": "Pass",
            "Next": "Parallel State 1"
        },
        "Parallel State 1": {
            "Type": "Parallel",
            "Branches": [{
                    "StartAt": "B",
                    "States": {
                        "B": {
                            "Type": "Pass",
                            "End": true
                        }
                    }
                },
                {
                    "StartAt": "C",
                    "States": {
                        "C": {
                            "Type": "Pass",
                            "End": true
                        }
                    }
                }
            ],
            "Next": "Parallel State 2"
        },
        "Parallel State 2": {
            "Type": "Parallel",
            "Branches": [{
                    "StartAt": "D",
                    "States": {
                        "D": {
                            "Type": "Pass",
                            "End": true
                        }
                    }
                },
                {
                    "StartAt": "E",
                    "States": {
                        "E": {
                            "Type": "Pass",
                            "End": true
                        }
                    }
                }
            ],
            "Next": "F"
        },
        "F": {
            "Type": "Pass",
            "End": true
        }
    }
}

【讨论】:

    【解决方案2】:

    答案是否定的,在 step 函数内部,没有任何状态可以为其 Next 任务设置多个状态(调用两个后继)。根据 AWS 步骤功能无法通过提供多个状态名称来将状态机作为 StartAt 启动。

    您可以调整您的逻辑并使用并行状态并实现相同,如果您分享您的用例可能有助于解决问题。

    并行状态为每个分支提供其自己输入的副本 数据(受 InputPath 字段的修改)。它生成 输出是一个数组,每个分支都有一个元素,包含 该分支的输出。

    状态函数示例

    {
      "Comment": "An example of the Amazon States Language using a choice state.",
      "StartAt": "FirstState",
      "States": {
        "FirstState": {
          "Type": "Task",
          "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
          "Next": "ChoiceState"
        },
        "ChoiceState": {
          "Type" : "Choice",
          "Choices": [
            {
              "Variable": "$.foo",
              "NumericEquals": 1,
              "Next": "FirstMatchState"
            },
            {
              "Variable": "$.foo",
              "NumericEquals": 2,
              "Next": "SecondMatchState"
            }
          ],
          "Default": "DefaultState"
        },
    
        "FirstMatchState": {
          "Type" : "Task",
          "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnFirstMatch",
          "Next": "NextState"
        },
    
        "SecondMatchState": {
          "Type" : "Task",
          "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnSecondMatch",
          "Next": "NextState"
        },
    
        "DefaultState": {
          "Type": "Fail",
          "Error": "DefaultStateError",
          "Cause": "No Matches!"
        },
    
        "NextState": {
          "Type": "Task",
          "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
          "End": true
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      正如我在How to simplify complex parallel branch interdependencies for Step Functions 中回答的那样,您所问的最好建模为DAG 而不是状态机。

      取决于您的用例,您也许可以解决它(就像 @horatiu-jeflea 的回答一样),但无论如何它是一种解决方法(不是直接的方法)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 2022-11-03
        相关资源
        最近更新 更多