
안녕하세요 !
오늘은 Airflow의 Trigger Rule이 무엇인지에 대한 포스팅을 하려고 합니다.
Trigger Rule 즉, 트리거 규칙은 Airflow가 Task의 실행 여부를 결정하기 위한 필수적인 조건을 말합니다.
태스크 간 의존성이 있을 경우 업스트림과 다운스트림의 관계가 만들어집니다.
이때 업스트림 태스크 결과가 다운스트림 태스크에도 영향을 미치게 되며 이 동작 유형을 전파라고 합니다.
예를 들어 아래와 같은 태스크들에 대한 DAG가 있다고 가정해보겠습니다.

의존성에 의해서 A가 먼저 실행됩니다. A는 성공을 할 수도 있고 실패를 할 수도 있습니다. B라는 Task에 어떤 트리거 규칙을 설정했냐에 따라 A의 결과에 따른 B의 실행 여부가 달라집니다.
B의 트리거 규칙이 all_success라고 설정되어있다고 가정하고 더 자세하게 설명해보겠습니다.
Airflow 기본적으로 설정되어 있는 트리거 규칙은 all_success이며 이는 모든 업스트림 태스크가 성공했을 때 트리거 됩니다.
위의 예시에 맞게 설명을 하자면, B의 트리거 규칙이 all_success라면 A가 성공하면 이것이 전파가 되어 B가 트리거가 되고 실행이 됩니다. 반대로 A의 결과가 실패라면 이것이 전파되어 B가 트리거가 되지 않아 실행도 되지 않습니다.

all_success는 기본값이며 모든 업스트림 태스크가 성공적으로 완료되야 트리거가 됩니다.
일반적인 워크플로에 대한 기본 트리거 규칙이라 할 수 있습니다.
all_failed는 모든 상위 태스크가 실패했거나 상위 태스크의 오류로 인해 실패했을 경우 트리거가 됩니다.
태스크 그룹에서 하나 이상 실패가 예상되는 상황에서 오류 처리 코드를 트리거하는 방법으로 사용됩니다.
all_done는 결과 상태에 관계없이 모든 업스트림이 실행되면 트리거가 됩니다.
모든 태스크가 완료되었을 때 실행하는 청소 코드를 실행할 때 사용합니다.
이때 청소 코드는 주로 시스템 종료이나 클러스터 중지와 같은 것을 말합니다.
all_skipped는 모든 업스트림 태스크가 skipped 상태이면 트리거가 됩니다.
one_failed는 하나 이상의 업스트림 태스크가 실패하자마자 트리거되며 다른 상위 태스크의 실행 완료를 기다리지 않습니다.
알림 또는 롤백과 같은 일부 오류 처리 코드를 빠르게 실행할 때 사용합니다.
one_success는 하나의 업스트림 태스크가 성공하자마자 트리거가 되며 다른 업스트림 태스크가 실행 완료가 되길 기다리지 않습니다.
하나의 결과를 사용할 수 있게 되는 즉시 다운스트림 연산이나 알림을 빠르게 실행할 수 있습니다.
one_done은 업스트림 태스크 중 하나 이상 성공 또는 실패 하면 트리거 됩니다.
none_failed는 업스트림 태스크가 실패하지 않고 성공 또는 건너뛴 상태일 경우 트리거가 됩니다.
none_failed_min_one_success는 업스트림 태스크 중 실패가 없고 성공한 Task가 적어도 1개 이상이면 트리거 됩니다.
none_skipped는 업스트림 태스크가 건너뛴 상태가 아닐 때 트리거 됩니다.
always는 언제나 트리거 되는 것을 말합니다.