Python을 이용해
Workflow
를 만들고 관리할 수 있는
Open-Source
기반 Workflow 관리 도구
작업(Task)을
정확한 시간에,
정확한 방법으로,
정확한 순서대로 실행하게 해주는 오케스트레이터
Workflow as code
Dynamic
- Airflow 파이프라인이 Python 코드로 구성되어 동적 파이프라인 생성이 가능합니다.
Extensive
- Airflow™ 프레임워크에는 다양한 기술과 연결하는 연산자가 포함되어 있습니다. 모든 Airflow 구성요소는 확장 가능하여 환경에 맞게 쉽게 조정할 수 있습니다.
Flexible
- Jinja 템플릿 엔진을 활용하여 워크플로 매개변수화가 내장되어 있습니다 .
다시 말해서,
- Python으로 제작된 도구
- 하나의 Workflow는 DAG (Directed Acycle Graph)
- DAG 안에는 1개 이상의 Task가 존재
- Task간 선/후행 연결이 가능하되, 순환되지 않고 방향성 소유
- Cron 기반 스케쥴링
- Monitoring 및 실패 작업에 대한 재실행 기능이 간편
- Scheduler
- 워크플로우를 스케쥴링하는 스케쥴러 데몬.
- 모든 DAG와 태스크를 모니터링하고 관리하며, 주기적으로 실행해야 할 태스크를 찾고 해당 태스크를 실행 가능한 상태로 변경한다.
- DAG Script
- 개발자가 작성한 Python 워크플로우 스크립트
- Web Server
- 에어플로우 웹 인터페이스를 제공하는 웹 서버.
- flask, gunicorn을 사용한다.
- MetaStore
- 어떤 DAG가 존재하고 어떤 태스크로 구성되는지, 어떤 태스크가 실행 중이고 실행 가능한 상태인지 등의 메타데이터가 저장되는 데이터베이스.
- Postgresql를 추천하지만, mysql, sqlite도 사용 가능하다.
- Executer
- 어떤 환경에서 task가 실행될지에 대한 타입 정의. 태스크 인스턴스를 실행하는 주체로, 다양한 타입이 존재한다.
- Worker
- 실체 task를 처리하는 컴포넌트
- Kerberos
- 인증 처리를 위한 프로세스로 필수 사항은 아니다.
Python 기반이므로, Python을 알고 있다면 적응하기 쉬움
대규모 Workflow에 적합한
(K8S 아키텍처)등 수평적 확장이 가능한 아키텍처 지원
Python의 방대한 라이브러리를 활용한 기능 지원
즉, Python으로 할 수 있는 모든 작업을 할 수 있다.
Customizing
실시간 Workflow에 적합하지 않는다.
_DAG 개수가 많아지면 모니터링이 어려움
Workflow를 GUI에서 만들지 않아서 Coding이 요구됨
from airflow import DAG
import datetime
import pendulum
from airflow.operators.bash import BashOperator
with DAG(
dag_id="dags_bash_operator",
schedule="0 0 * * *",
start_date=pendulum.datetime(2024, 1, 1, tz="Asia/Seoul"),
catchup=False
) as dag:
bash_t1 = BashOperator(
task_id="bash_t1",
bash_command="echo whoami",
)
bash_t2 = BashOperator(
task_id="bash_t2",
bash_command="echo $HOSTNAME",
)
# Task 수행 순서 설정
bash_t1 >> bash_t2