Как сделать так, чтобы задание Python связывалось при вызове функции step? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть связующее задание в Python, которое я вызываю из пошаговой функции. Функция шага успешно запускает задание. Работа успешно заканчивается. Но функция шага никогда не переходит к следующему шагу. Есть ли какая-то необходимая конфигурация / разрешение для функции шага, чтобы реагировать на успех работы? Что-то делать в скрипте Python?

Вот определение функции шага (конечного автомата):

"MyGlueTask": {
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "my_glue_job"
  },
  "ResultPath": "$.MyGlueTask",
  "Next": "NextGlueJob"
}

1 Ответ

0 голосов
/ 02 июля 2019

Вы уверены, что он никогда не перейдет к следующему шагу? Может быть, но через 5 минут?

Я спрашиваю об этом, потому что у Step Functions есть ограничение: даже если ваше задание Glue выполняется за несколько секунд, Step Functions фактически опрашивает результаты задания Glue раз в 5 минут.

Обходное решение, которое вы могли бы применить, - это изменить arn:aws:states:::glue:startJobRun.sync на arn:aws:states:::glue:startJobRun - тогда задание Glue job просто вызовет задание Glue и перейдет к следующему шагу.

Скорее всего, вам нужно подождать, пока работа с клеем закончится, и получить оттуда какой-то результат. Поэтому вам нужно обернуть предыдущее состояние еще несколькими.

  1. Основная цель - просто запустить работу с клеем. Кроме того, нам нужна работа с клеем RunJobId. Я не знаю, можно ли его получить из самого задания Glue, поэтому я создал лямбду, чтобы запустить задание Glue с помощью функции boto3 start_job_run, а затем получить RunJobId из ответа.
  2. Создайте лямбду, которая будет захватывать состояние (JobRunState) задания склеивания (через функцию boto3 get_job_run) с помощью RunJobId из предыдущего шага.
  3. Использование Wait Тип состояния Step Functions, запускать лямбду, которую вы создали, каждые N секунд.
  4. Используйте Choice тип состояния, чтобы отфильтровать статусы работы Glue.
    • Если RUNNING, вернитесь к шагу Wait.
    • Если SUCCEEDEED, тогда переходите к следующему состоянию.
    • Если [FAILED | STOPPED], иди куда угодно.

Наконец, это выглядит примерно так: this .

...