Может ли AWS Step Function описать этот тип потока данных? - PullRequest
3 голосов
/ 26 сентября 2019

dataflow

Нельзя описать с помощью Parallel State в функции шага AWS.

B и C должны быть параллельно.

C отправляет сообщения наD и E.

D и E должны быть параллельны.

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

enter image description here

{
    "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
        }
    }
}
0 голосов
/ 27 сентября 2019

Как я уже ответил в Как упростить сложные параллельные параллельные ветви для функций шага , то, что вы просили, лучше смоделировать как DAG , но не как конечный автомат.

Зависит от вашего варианта использования, вы можете обойти его (так же, как и ответ @ horatiu-jeflea), но в любом случае это обходной путь (не прямой путь).

0 голосов
/ 27 сентября 2019

Ответ - Нет, внутри пошаговой функции никакое состояние не может установить несколько состояний (вызывает обоих наследников) для своей следующей задачи.В соответствии с пошаговой функцией AWS невозможно запустить State Machine как StartAt, указав несколько имен состояний.

Вы можете настроить свою логику и использовать состояние Parallel и достичь того же самого. Если вы поделитесь своим сценарием использования, это может помочь в решении проблем.

Параллельное состояние предоставляет каждой ветви копию своего собственного вводаданные (могут быть изменены полем InputPath).Он генерирует выходные данные, которые представляют собой массив с одним элементом для каждой ветви, содержащий выходные данные из этой ветви.

Пример функции состояния

enter image description here

{
  "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
    }
  }
}
...