Как вызвать внешний сервер из Apache Airflow ( сразу после каждого запуска DAG )

#airflow #airflow-scheduler

Вопрос:

Я новичок в airflow, я хочу звонить на внешний сервер лицензирования каждый раз, когда запуск DAG успешно завершен.

Комментарии:

1. не могли бы вы предоставить дополнительную информацию в своем вопросе? Что вы подразумеваете под «звонком» — вы спрашиваете о выполнении HTTP-запроса к другой службе? Можете ли вы поделиться примерами своего кода, тем, что вы пробовали и т.д.

2. Да, это HTTP-запрос к другой службе. Сервер вернет информацию о лицензировании и все такое . Я не мог найти никаких ресурсов в Интернете для того же самого. Спасибо

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

Ответ №1:

В Airflow нет события «успешное завершение». Вы можете добавить кластерные политики — https://airflow.apache.org/docs/apache-airflow/stable/concepts/cluster-policies.html для событий «перед началом» (для групп поддержки и задач.

Я думаю, что единственный способ убедиться, что это работает, — это установить задачу в качестве «последнего» шага в вашей DAG (когда все остальные завершатся успешно) с набором «on_success_callback».

Возможно, будет невозможно добавить такую задачу автоматически, если вы этого захотите.

Вы могли бы попытаться использовать для этого «Мутацию экземпляра задачи», но я думаю, что вы не можете изменить обратные вызовы, и вам нужно будет знать, какую задачу вам нужно каким-то образом мутировать.

https://airflow.apache.org/docs/apache-airflow/stable/concepts/cluster-policies.html#task-instance-mutation

Одна вещь, которую вы МОГЛИ бы сделать, если хотите каким-то образом «принудить» существование такой задачи и обратного вызова, вы могли бы добавить «Кластерную политику», которая могла бы прочитать вашу DAG и проверить, существует ли такая задача (и не позволяйте DAG запускаться без нее). Но, по-моему, это довольно сложно.