Вы уверены, что он никогда не перейдет к следующему шагу? Может быть, но через 5 минут?
Я спрашиваю об этом, потому что у Step Functions есть ограничение: даже если ваше задание Glue выполняется за несколько секунд, Step Functions фактически опрашивает результаты задания Glue раз в 5 минут.
Обходное решение, которое вы могли бы применить, - это изменить arn:aws:states:::glue:startJobRun.sync
на arn:aws:states:::glue:startJobRun
- тогда задание Glue job просто вызовет задание Glue и перейдет к следующему шагу.
Скорее всего, вам нужно подождать, пока работа с клеем закончится, и получить оттуда какой-то результат. Поэтому вам нужно обернуть предыдущее состояние еще несколькими.
- Основная цель - просто запустить работу с клеем. Кроме того, нам нужна работа с клеем
RunJobId
.
Я не знаю, можно ли его получить из самого задания Glue, поэтому я создал лямбду, чтобы запустить задание Glue с помощью функции boto3 start_job_run
, а затем получить RunJobId
из ответа.
- Создайте лямбду, которая будет захватывать состояние (
JobRunState
) задания склеивания (через функцию boto3 get_job_run
) с помощью RunJobId
из предыдущего шага.
- Использование
Wait
Тип состояния Step Functions, запускать лямбду, которую вы создали, каждые N секунд.
- Используйте
Choice
тип состояния, чтобы отфильтровать статусы работы Glue.
- Если
RUNNING
, вернитесь к шагу Wait
.
- Если
SUCCEEDEED
, тогда переходите к следующему состоянию.
- Если
[FAILED | STOPPED]
, иди куда угодно.
Наконец, это выглядит примерно так: this .