Это нельзя описать с помощью Parallel State
в AWS Step Function.
B и C должны быть параллельны.
C отправляет сообщения как D, так и E.
D и E должны быть параллельны.
Это нельзя описать с помощью Parallel State
в AWS Step Function.
B и C должны быть параллельны.
C отправляет сообщения как D, так и E.
D и E должны быть параллельны.
{
"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
}
}
}
Ответ: Нет, внутри шаговой функции никакое состояние не может устанавливать несколько состояний (вызывает обоих преемников) для своей следующей задачи. В соответствии с пошаговой функцией 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
}
}
}
Как я ответил в Как упростить сложный взаимозависимости параллельных ветвей для Step Functions, то, что вы просили, лучше смоделировать как DAG Но не государственная машина.
В зависимости от вашего варианта использования вы можете обойти это (так же, как ответ @ horatiu-jeflea), но в любом случае это обходной путь (не простой способ).
choice
- person LostJon   schedule 26.09.2019