Конечный автомат игнорирует ошибки пошаговой функции

У меня проблема с рабочим процессом с пошаговыми функциями aws. Я определил несколько состояний и хотел добавить к ним обработку ошибок. Проблема в том, что для любой ошибки функции (возникшее исключение, отклонение необработанного обещания или ошибки кода) конечный автомат всегда получает LambdaFunctionSucceeded и продолжает выполнение до тех пор, пока не завершится последнее состояние.

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

{
    "Comment": "Example state machine",
    "StartAt": "State1",
    "States": {
        "State1": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:eu-west-2:123456789012:function:State1Function",
            "Next": "Finish",
            "ResultPath": "$.State1Result",
            "Catch": [
                {
                    "ErrorEquals": [
                        "States.TaskFailed"
                    ],
                    "Next": "Failure"
                }
            ]
        },
        "Failure": {
            "Type": "Fail",
            "Error": "$"
        },
        "Finish": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:eu-west-2:123456789012:function:FinishFunction",
            "End": true,
            "Catch": [
                {
                    "ErrorEquals": [
                        "States.TaskFailed"
                    ],
                    "Next": "Failure"
                }
            ]
        }
    }
}

State1Function пример:

module.exports = async event => {
    not().defined; // but execution does not fail
    // do stuff
};

Я тестирую его в локальной среде, используя sam local start-lambda и amazon/aws-stepfunctions-local образ докера. Вывод sam для выполнения State1Function:

2019-11-19T08: 37: 40.910Z b2421c61-d31c-1482-6a65-f6cbd42328a7 ERROR Ошибка вызова {"errorType": "ReferenceError", "errorMessage": "not is not defined", "stack": ["ReferenceError: not не определено "," в Runtime.module.exports [как обработчик] (/var/task/path/to/state1function.js:7:5) "," в Runtime.handleOnce (/ var / runtime / Runtime. js: 66: 25) "]}

Вывод из контейнера amazon/aws-stepfunctions-local (который обрабатывает выполнение конечного автомата):

2019-11-19 08: 37: 41.348: arn: aws: состояния: eu-west-2: 123456789012: выполнение: test: test4: {"Тип": "LambdaFunctionSucceeded", "PreviousEventId": 4, "LambdaFunctionSucceededEventDetails": {"Вывод": "{\" errorType \ ": \" ReferenceError \ ", \" errorMessage \ ": \" не не определено \ "}"}}

Казнь продолжалась.

Когда я остановил sam local start-lambda и конечный автомат не смог вызвать одну из пошаговых функций, результат был таким:

2019-11-19 08: 37: 53.406: arn: aws: состояния: eu-west-2: 123456789012: выполнение: test: test4: {"Тип": "LambdaFunctionFailed", "PreviousEventId": 23, "LambdaFunctionFailedEventDetails": {"Ошибка": "Lambda.SdkClientException", "Причина": "Невозможно выполнить HTTP-запрос: целевой сервер не ответил"}}

Тогда казнь не удалась. Я ожидал бы аналогичного поведения при ошибках пошаговой функции.

Как правильно справляться со сбоями ступенчатой ​​функции?


person kpusmo    schedule 19.11.2019    source источник


Ответы (1)


Ваша пошаговая функция в порядке, я скопировал ее и запустил с помощью моей лямбда-выражения python, вывести сообщение об ошибке: < img src = "https://i.stack.imgur.com/3s7ar.png" alt = "введите описание изображения здесь"> "NameError: имя 'y' не определено".

Вот результат пошаговой функции:  введите описание изображения здесь

Проблема заключается в выводе вашего контейнера, в котором не указано «errorType», и это необходимо для того, чтобы конечный автомат увидел ошибку.

дайте мне знать, помогло ли это

person zip    schedule 20.11.2019