#amazon-web-services #aws-step-functions
Вопрос:
У меня есть две задачи ( SQS 1 A
и SQS 1 B
) в состоянии parellel, которые я хочу выполнить независимо. Если один из них потерпит неудачу, я не против, чтобы другой был завершен, но я не хочу переходить к финальной задаче ( SQS 2
). Поэтому я добавил состояние прохождения в качестве ловца ошибок для обоих SQS 1 A
, и SQS 1 B
поэтому проверку ошибок можно выполнять вне параллельного состояния.
Затем я просматриваю вывод параллельной задачи и ищу любую ошибку. Мне это кажется немного неуклюжим. Есть ли более приятный способ сделать это?
Определение:
{ "Comment": "A description of my state machine", "StartAt": "Start", "States": { "Start": { "Type": "Pass", "Next": "Run in parallel" }, "Run in parallel": { "Type": "Parallel", "Branches": [ { "StartAt": "SQS 1 A", "States": { "SQS 1 A": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "lt;redactedgt;", "MessageBody": { "MyTaskToken.$": "$.Task.Token" } }, "End": true, "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Handle Error", "ResultPath": "$.error" } ], "ResultPath": "$.Status" }, "Handle Error": { "Type": "Pass", "End": true } } }, { "StartAt": "SQS 1 B", "States": { "SQS 1 B": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "lt;redactedgt;", "MessageBody": { "MyTaskToken.$": "$.Task.Token" } }, "End": true, "ResultPath": "$.Status", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Handle Error 2", "ResultPath": "$.error" } ] }, "Handle Error 2": { "Type": "Pass", "End": true } } } ], "Next": "Map", "ResultPath": "$.parallelTaskResult" }, "Map": { "Type": "Map", "Iterator": { "StartAt": "Choice", "States": { "Choice": { "Type": "Choice", "Choices": [ { "Variable": "$.error", "IsPresent": true, "Next": "Fail (1)" } ], "Default": "Pass" }, "Pass": { "Type": "Pass", "End": true }, "Fail (1)": { "Type": "Fail" } } }, "ItemsPath": "$.parallelTaskResult", "Next": "SQS 2" }, "SQS 2": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "lt;redactedgt;", "MessageBody": { "MyTaskToken.$": "$.Task.Token" } }, "End": true } } }