Мы создали минимальный конечный автомат с одним шагом AWS Lambda. Затем установите период ожидания шага в дескрипторе конечного автомата на низкое значение.
Он корректно завершается с истечением времени ожидания, но тогда результатом является «сбой» вместо «тайм-аут». Интересно почему?
Шаги для воспроизведения
Создайте простую лямбда-функцию, которая будет выполнять длительный процесс. Для простоты создайте скрипт на Python и переведите функцию в спящий режим на несколько секунд:
import time
def lambda_handler(event, context):
time.sleep(10) # Delays for 10 seconds.
return event
Установите время ожидания для лямбда-функции на 30 секунд. (Это никогда не истечет.)
Создайте простой конечный автомат, который будет вызывать эту лямбду с таймаутом в 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
}
}
}
Начать выполнение.
Результат
Согласно «Журналу событий выполнения», последним событием является «ExecutionFailed», а «ошибка» - «States.Timeout». Пока все хорошо.
Но:
Когда вы просматриваете список выполнений конечного автомата, состояние этого выполнения «Не выполнено». (Ожидается: «Превышено время ожидания».)
При просмотре списка конечных автоматов это выполнение увеличивает счетчик в столбце «Сбой». (Ожидается: увеличить счетчик в столбце «Тайм-аут».)
Я бы предположил, что каким-то образом результат выполнения некорректно отображается, но не может найти причину. Или это просто ошибка в действиях конечного автомата на основе Lambda?!