Исходя из того, что я обнаружил, невозможно обновить только часть работы с помощью API-интерфейса update-job.
Я столкнулся с той же проблемой и предоставил роль, чтобы обойти эту ошибку. Команда сработала, но API задания обновления фактически сбрасывает другие параметры к значениям по умолчанию, таким как тип приложения, язык задания, класс, время ожидания, максимальная емкость и т. Д.
Таким образом, если ваше ранее существующее задание было приложением Spark в scala, оно не будет работать, так как AWS по умолчанию использует Python Shell и python в качестве языка задания как часть API-интерфейса задания на обновление. И этот API не дает возможности установить тип языка задания в scala и установить основной класс (требуется в случае scala). Он предоставляет способ установки типа приложения Spark application.
Если вы не хотите указывать Роль в API задания обновления. Один из подходов состоит в том, чтобы скопировать новый сценарий с тем же именем и тем же местоположением, которое используется в вашем ранее существующем задании ETL, а затем запустить ETL, используя API начального задания, как часть процесса CI.
Второй подход состоит в том, чтобы напрямую запустить ETL и заставить его использовать последний скрипт в вызове API start-job:
aws glue start-job-run --job-name <job-name> --arguments=scriptLocation="<path to your latest script>"
Единственное предостережение со вторым подходом - когда вы смотрите в консоли, задание ETL будет по-прежнему ссылаться на старый сценарий Location. Приведенная выше команда просто заставляет этот запуск задания использовать последний скрипт, который вы можете подтвердить, посмотрев на вкладку «Журнал» в консоли Glue ETL.