Повторите задачу StepFunction на основе сообщения об ошибке - PullRequest
0 голосов
/ 09 февраля 2019

Согласно документации AWS StepFunction, можно настроить повторные попытки для каждой ошибки, но мне интересно, можно ли использовать детали из сообщения об ошибке для определения стратегии повторных попыток?

В моем случае я запускаю Glue ETLзадание, которое может не выполниться с пользовательским исключением NoDataLoadedException, поэтому я хотел бы распознать его и не повторятьВот мое определение задачи (первый Retry блок никогда не происходит):

"ExecuteEtl": {
     "Type": "Task",
     "Resource": "arn:aws:states:::glue:startJobRun.sync",
     "Parameters": {
       "JobName.$": "$.jobName",
        "Arguments.$": "$.jobArguments"
      },
      "Retry" : [{
        "ErrorEquals": [ "NoDataLoadedException" ],
        "MaxAttempts": 0
      },{
        "ErrorEquals": [ "States.Timeout", "States.TaskFailed", "States.Runtime" ],
        "MaxAttempts": 4,
        "IntervalSeconds": 60,
        "BackoffRate": 2
      }],
      "Next": "ExtractGlueJobExecutionId"
}

Вот вывод ошибки:

{
  "resourceType": "glue",
  "resource": "startJobRun.sync",
  "error": "{\"AllocatedCapacity\":10,\"Arguments\":{},\"Attempt\":0,\"CompletedOn\":1549662956476,\"ErrorMessage\":\" NoDataLoadedException No data loaded from...",
  "cause": "States.TaskFailed"
}

Можно ли использовать error.ErrorMessage для определения стратегии повторениядля задания?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Даже мне нужно получить сообщение errorMessage в одиночку для моего варианта использования. Вы получили решение

0 голосов
/ 09 февраля 2019

Добавьте ошибку NoDataLoadedException в блок Catch .В нем вы можете определить шаг Next.Это должно работать:

"ExecuteEtl": {
        "Type": "Task",
        "Resource": "arn:aws:states:::glue:startJobRun.sync",
        "Parameters": {
            "JobName.$": "$.jobName",
            "Arguments.$": "$.jobArguments"
        },
        "Retry" : [{
            "ErrorEquals": [ "States.Timeout", "States.TaskFailed", "States.Runtime" ],
            "MaxAttempts": 4,
            "IntervalSeconds": 60,
            "BackoffRate": 2
        }],
        "Catch": [{
            "ErrorEquals": [ "NoDataLoadedException" ],
            "Next": "NoDataStep"
        }],
        "Next": "ExtractGlueJobExecutionId"
    }

Поскольку NoDataLoadedException не будет обрабатываться блоком Retry, он попадет в Catch, где вы можете отреагировать на него.

...