개요
Airflow 버전 2.5.1에서 취약점이 발견되어 2.8.2 버전으로 업그레이드를 진행했다. 진행 후에 Airflow WebServer에서 Dag Trigger 시 Trigger DAG w/ config 버튼이 노출되지 않는 것을 확인했다.
기존 (2.5.1)
현재 (2.8.2)
원인을 파악하고 수정해 보자.
원인 - Trigger UI Form
이 현상의 원인은 Airflow 2.6.0에서 도입된 Trigger UI Form 기능과 관련이 있다.
Airflow 2.6.0에서는 Dag 수준에서 params 매개변수가 정의되어 있으면 사용자 친화적인 트리거 양식을 렌더링 해준다. 트리거 양식은 Trigger DAG 버튼을 누르면 제공된다.
렌더링 되는 트리거 양식은 DAG 객체의 params로 전달된 값을 기반으로 한다. 예로 들어 아래 코드와 같이 params를 정의하면,
with DAG(
dag_id=Path(__file__).stem,
description=__doc__.partition(".")[0],
doc_md=__doc__,
schedule=None,
start_date=datetime.datetime(2022, 3, 4),
catchup=False,
tags=["example_ui"],
params={
"names": Param(
["Linda", "Martha", "Thomas"],
type="array",
description="Define the list of names for which greetings should be generated in the logs."
" Please have one name per line.",
title="Names to greet",
),
"english": Param(True, type="boolean", title="English"),
"german": Param(True, type="boolean", title="German (Formal)"),
"french": Param(True, type="boolean", title="French"),
},
) as dag:
Trigger Dag 버튼을 눌렀을 때 아래와 같은 폼이 제공된다.
폼으로 설정한 값은 Run config로 전달된다.
반대로 params에 정의된 값이 없으면 트리거 양식이 제공되지 않는다.
즉, Airflow 2.6.0 이상의 버전에서는 기존에 기본적으로 제공되던 Trigger DAG w/ config 버튼이 비활성화되어 있다고 해석할 수 있다.
해결 방법
기존과 동일하게 Trigger DAG w/ config 버튼을 사용하기 위해서는 Airflow 2.7.0 이상이 필요하고, airflow.cfg에 다음과 깉이 설정하면 된다.
[webserver]
show_trigger_form_if_no_params = True
설정을 적용 후 Airflow WebServer를 재시작하면 기존과 동일하게 Trigger DAG w/config 버튼을 확인할 수 있고, JSON 형식으로 값을 전달할 수 있다.
참고로 params가 정의되어 있는 Dag의 경우, Trigger Dag 버튼이 아니라 Trigger DAG w/ config 버튼을 클릭해야 양식을 확인할 수 있다.
Trigger DAG w/ config 버튼이 아니라 Trigger DAG 버튼을 클릭하면 Run Config 없이 Dag가 실행된다. 아래가 Trigger Dag로 Dag를 실행시켰을 때의 Dag run이다.
참고 문서
https://stackoverflow.com/questions/78547701/trigger-dag-with-config
https://www.astronomer.io/docs/learn/airflow-params/
https://www.astronomer.io/docs/learn/airflow-params/#define-dag-level-params-defaults