본문 바로가기
Minding's Programming/Airflow

[Airflow] 전역변수 Variable 이용하기

by Minding 2024. 7. 23.
728x90
반응형

전역 변수 Variable?

 

Xcom은 특정 DAG 또는 특정 Schedule에 수행되는 task 간에만 공유되는 데이터라면, Variable은 모든 DAG에 공유되는 데이터라고 할 수 있다.

 

Variable은 Airflow Webserver(http://localhost:8080/)에서 등록할 수 있다. Admin 메뉴 하단 'Variables'라는 메뉴에서 등록가능하다. (실제 Variable의 Key, Value 값은 메타 DB의 Variable 테이블에 저장된다.)

 

 

전역 변수 사용하기

 

전역 변수를 사용하는 방법에는 크게 두 가지가 있다.

 

1) Variable 라이브러리를 이용해 가져오기

from airflow.models import Variable

var_value = Variable.get("sample_key")
bash_var_1 = BashOperator(
task_id='bash_var_1',
bash_command=f"echo variable:{var_value}"
)

첫 번째로는 Airflow의 라이브러리를 이용해 파이썬 문법으로 미리 특정 변수에 선언해 가져오는 것이다. 위 코드에서는 var_value라는 변수에 get() 메서드를 이용해 데이터를 가져왔다.

 

2) Jinja 템플릿 이용 오퍼레이터 내부에서 가져오기

bash_var_2 = BashOperator(
task_id ='bash_var_2',
bash_command=f"echo variable: {{var.value.sample_key}}"
)

두 번째는 Jinja 템플릿을 이용하는 방법이다. {{ var.value.{등록한 키값} }}의 형식으로 가져올 수 있다.

 

이 두 방법 중 권고되는 방법은 Jinja 템플릿을 이용하는 두 번째 방법이라고 한다. 스케줄러가 주기적으로 DAG을 파싱하는 경우, Variable.get()의 개수만큼 DB연결을 하기 때문에 불필요한 부하가 발생하기 때문이다. 이는 스케줄러의 과부하로 이어져 서비스 또는 API 등의 제공에 불편을 초래할 수 있다.

 

 

전역변수는 언제 사용할까?

 

전역 변수는 주로 협업 환경에서 표준화된 dag을 만들기 위해 주로 사용된다. 주로 상수(CONST)로 지정해서 사용할 변수들을 세팅하는게 좋다.

 

예시

  • base_sh_dir = /opt/airflow/plugins/shell
  • 주로 반복해서 사용하는 절대경로
  • email, Alert 메시지를 받을 담당자의 email 주소 정보

 

 

728x90
반응형

댓글