Почему конечный автомат AWS не отображает выполнение как «тайм-аут», а как «сбой»? - PullRequest
1 голос
/ 06 марта 2019

Мы создали минимальный конечный автомат с одним шагом AWS Lambda. Затем установите период ожидания шага в дескрипторе конечного автомата на низкое значение.

Он корректно завершается с истечением времени ожидания, но тогда результатом является «сбой» вместо «тайм-аут». Интересно почему?

Шаги для воспроизведения

  1. Создайте простую лямбда-функцию, которая будет выполнять длительный процесс. Для простоты создайте скрипт на Python и переведите функцию в спящий режим на несколько секунд:

    import time
    
    def lambda_handler(event, context):
        time.sleep(10)   # Delays for 10 seconds.
        return event 
    
  2. Установите время ожидания для лямбда-функции на 30 секунд. (Это никогда не истечет.)

  3. Создайте простой конечный автомат, который будет вызывать эту лямбду с таймаутом в 5 секунд:

    {
        "StartAt": "Execute Lambda",
        "States" : {
           "Execute Lambda" : {
               "Type" : "Task", 
               "Resource": "arn:aws:lambda:eu-west-1:**********:function:helloWorld",
               "TimeoutSeconds" : 5, 
               "Retry": [
                   {
                        "ErrorEquals": ["States.ALL"],
                        "MaxAttempts": 0
                   }
                ],
                "End" : true
            }
        }
    }
    
  4. Начать выполнение.

Результат

Согласно «Журналу событий выполнения», последним событием является «ExecutionFailed», а «ошибка» - «States.Timeout». Пока все хорошо.

Но:

  1. Когда вы просматриваете список выполнений конечного автомата, состояние этого выполнения «Не выполнено». (Ожидается: «Превышено время ожидания».)

  2. При просмотре списка конечных автоматов это выполнение увеличивает счетчик в столбце «Сбой». (Ожидается: увеличить счетчик в столбце «Тайм-аут».)

Я бы предположил, что каким-то образом результат выполнения некорректно отображается, но не может найти причину. Или это просто ошибка в действиях конечного автомата на основе Lambda?!

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Состояние Тайм-аут в Шаговой функции относится только к времени выполнения Шаговой функции (до 1 года), состояние тайм-аута вашей лямбда-функции является событием Сбой для Состояния.Помните, что вы можете создать состояние «Тип»: «Ожидание» на вашем шаговом компьютере, таким образом вы сэкономите время на запуск лямбды, которая оплачивается.

0 голосов
/ 06 марта 2019

Существует пять состояний, связанных с выполнением конечного автомата.

  • Выполняется
  • Успешно
  • Не удалось
  • Прервано
  • Тайм-аут

Выполнение может продолжаться до 1 года.Если одно из состояний в выполнении конечного автомата истекло, то выполнение не выполнено, а не истекло.Однако, если выполнение выполняется более 1 года, вы увидите статус «Превышено время ожидания».

См. Пошаговые функции пределы .

Если выполнение выполненов течение более 1 года он завершится с ошибкой States.Timeout и выдаст метрику ExecutionsTimedout CloudWatch.

...