J'ai un DAG qui se déploie en parallèle sur plusieurs unités indépendantes. Cela s'exécute dans AWS, nous avons donc des tâches qui adaptent notre AutoScalingGroup au nombre maximal de travailleurs au démarrage du DAG et au minimum à la fin du DAG. La version simplifiée ressemble à ceci:
| - - taskA - - |
| |
scaleOut - | - - taskB - - | - scaleIn
| |
| - - taskC - - |
Cependant, certaines tâches de l'ensemble parallèle échouent occasionnellement, et je ne peux pas exécuter la tâche scaleDown lorsqu'une des tâches A-C échoue.
Quelle est la meilleure façon d'exécuter une tâche à la fin du DAG, une fois toutes les autres tâches terminées (succès ou échec)? Le paramètre depend_on_upstream sonnait comme ce dont nous avions besoin, mais n'a en fait rien fait basé sur les tests.
Tous les opérateurs ont un argument trigger_rule
qui peut être réglé sur 'all_done'
, qui déclenchera cette tâche indépendamment de l'échec ou du succès de la ou des tâches précédentes.
Vous pouvez définir la règle de déclenchement pour la tâche que vous souhaitez exécuter sur 'all_done'
au lieu de la valeur par défaut 'all_success'
.
Une tâche d'opérateur bash simple avec cet argument ressemblerait à ceci:
task = BashOperator(
task_id="hello_world",
bash_command="echo Hello World!",
trigger_rule="all_done",
dag=dag
)