Может ли AWS Step Function описать такой поток данных?

поток данных

Это нельзя описать с помощью Parallel State в AWS Step Function.

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

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

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


person Tauta    schedule 26.09.2019    source источник
comment
какие из них нужно запускать параллельно?   -  person Horatiu Jeflea    schedule 26.09.2019
comment
вы бы использовали choice   -  person LostJon    schedule 26.09.2019
comment
@HoratiuJeflea B параллельно с C, D параллельно с E   -  person Tauta    schedule 26.09.2019
comment
@LostJon Я хочу вызвать обоих преемников.   -  person Tauta    schedule 26.09.2019


Ответы (3)


введите описание изображения здесь

{
    "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
        }
    }
}
person Horatiu Jeflea    schedule 27.09.2019

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

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

Состояние Parallel предоставляет каждой ветви копию собственных входных данных (которые могут быть изменены полем 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
    }
  }
}
person vaquar khan    schedule 27.09.2019

Как я ответил в Как упростить сложный взаимозависимости параллельных ветвей для Step Functions, то, что вы просили, лучше смоделировать как DAG Но не государственная машина.

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

person wanghq    schedule 27.09.2019