- 파이썬을 이용해 워크플로우를 만들고 관리할 수 있는 오픈소스 기반 워크플로우 관리 도구
- 2014년 에어비앤비에서 만든 워크플로우 관리 솔루션으로 현재는 Apache Open Source 재단에서 관리되고 있는 프로젝트
- Airflow는 워크플로우를 DAG을 사용하여 정의하고, 관리하는 프로그램
- 자유도가 크고, 확장성이 좋은 워크플로우 관리 프로그램
- 파이썬으로 제작된 도구이며 이용자가 워크플로우 생성시에도 파이썬으로 구현해야 함
- 하나의 워크플로우는 DAG(Directed Acyclic Graph) 이라 부르며 DAG 안에는 1개 이상의 Task가 존재
- 예를 들어, REST API로부터 데이터를 내려 받아 DB에 insert하려는 과제를 수행하기 위해 그림 1 와 같은 단계들이 필요하다.
- 각 각의 단계를 task라 하고 각 각 선/후행 단계가 있다. (1번 task \(\rightarrow\) 2번 task \(\rightarrow\) 3번 task)
- 이 tasks의 집합을 DAG이라고 한다.
- Task간 선후행 연결이 가능하되 순환되지 않고 방향성을 가짐(=DAG)
- Cron 기반의 스케줄링
- Linux에서 사용되는 스케쥴링으로 task들이 시작되어야 하는 시작 시간이나 주기를 설정
- 모니터링 및 실패 작업에 대한 재실행 기능이 간편
- In 그림 2, 초록색 테두리의 node는 성공한 task를 의미하고 분홍색 테두리의 node는 실패한 task를 의미한다. 위의 그림에는 없지만 회색 테두리는 queue (준비) 상태를 의미한다. Airflow에는 DAG이 일련의 task로 구성되어 있기 때문에 실행 상태도 성공, 실패 및 준비 상태같은 여러 종류가 있다. 나머지 상태는 뒷 부분에서 차차 다뤄보기로 한다.
- Maturity: 성숙도로서 github에서 얼마나 많은 사람들이 관리하고 있는지 즉 community의 활성도를 나타내는 지표. 유료 서비스의 경우 user 가 제작사에게 패치를 요청할 수 있지만 open source에 경우 제작사가 없어 community의 활성도가 중요하다.
- Popularity: github starts의 개수
- Simplicity: workflow를 얼마나 쉽게 사용할 수 있는지에 대한 난이도로 airflow는 사용하기에 어려운 난이도를 보여준다.
- Breadth: 확장성. 즉 얼마나 customizing할 수 있는지 보여주는 척도
- 파이썬에 익숙하다면 러닝 커브 빠르게 극복 가능
- 대규모 워크플로우 환경에서 부하 증가시 수평적 확장 가능한 Kubenetes 등 아키텍처 지원
- 파이썬에서 지원되는 라이브러리 활용하여 다양한 도구 컨트롤 가능 (GCP, AWS등 대다수 클라우드에서 제공하는 서비스)
- GCP: Google Cloud Platform
- AWS: Amazon Web Services
- Airflow에서 제공하는 파이썬 소스 기반으로 원하는 작업을 위한 커스터마이징이 가능 (오퍼레이터, Hook, 센서 등)
- 실시간 워크플로우 관리에 적합치 않음 (최소 분 단위 실행)
- 워크플로우(DAG) 개수가 많아질 경우 모니터링이 쉽지 않음
- 워크플로우를 GUI환경에서 만들지 않기에 파이썬에 익숙하지 않다면 다루기 쉽지 않음 협업 환경에서 프로그래밍 표준이 없으면 유지관리가 쉽지 않음
- 01.intro.qmd: Airflow 개념, 특징, 장단점, DAG 기본 개념
- 02.env_setting.qmd: WSL, Docker, Airflow 설치 및 개발환경 구축
- 03.operator_basic.qmd: Bash Operator, DAG 생성, Cron 스케줄링, Task 연결, 외부 스크립트 실행, Email Operator
- 04.python_operator.qmd: Python Operator, 외부 Python 모듈 import, Task Decorator, op_args/op_kwargs 사용법
- 05.template_variable.qmd: Jinja Template과 Airflow에서의 활용법
- 06.data_share.qmd: Xcom을 통한 Task간 데이터 공유
- 07.task_handling.qmd: BranchPythonOperator, Task 분기 처리, Trigger Rule, Task Groups
- 08.more_operators.qmd: 추가 Operator들, TriggerDagRun, Provider Operator, Custom Operator 개발
- 09.connection_hook.qmd: Docker Compose 해석, PostgreSQL 컨테이너, Connection & Hook 설정
- 10.sensor.qmd: Sensor 개념, 다양한 Sensor 유형, Custom Sensor 생성
- 11.airflow_functions.qmd: Dataset을 이용한 DAG 트리거, default_args, SLA, CLI 사용법, Triggerer
- 12.dashboarding.qmd: R Shiny 컨테이너 설정 및 대시보드 구성
- Docker를 이용한 Airflow 설치
- WSL 환경 구축
- 개발환경 설정
- Python 가상환경 구성
- BashOperator로 Shell 스크립트 실행
- PythonOperator로 Python 함수 실행
- EmailOperator로 이메일 전송
- 외부 스크립트 파일 실행
- Task간 데이터 공유 (Xcom)
- Task 분기 처리 (BranchOperator)
- Sensor를 이용한 조건부 실행
- Connection과 Hook을 통한 외부 시스템 연결
- Custom Operator 개발
- Template 변수 활용
- DAG 모니터링 및 관리
- Cron 기반 스케줄링
- Task 의존성 설정
- DAG간 의존관계 설정
- 실시간에 가까운 처리 (Sensor)
1 Introduction
1.1 Characteristics
1.2 Motivation
1.2.1 Why to Learn Airflow?
그림 3 을 보면, 그림 3 (a) 에서 볼수 있듯이 최근 들어 airflow의 인기가 급증하는 것을 볼 수 있다. 그림 3 (b) 에서 그 이유를 짐작할 수 있는데 airflow가 simplicity가 C 사용하기는 어렵지만 구현할 수 있는 폭 breadth가 높다 (Breadth: A). 즉, 다른 workflows에 비해 복잡한 코딩을 요구하는 만큼 그 자유도가 높다는 것을 짐작할 수 있다.
1.3 Strength
1.4 Weakness
2 airflow 정리
2.1 기초 과정 (1-5편)
2.1.1 중급 과정 (6-10편)
2.1.2 고급 과정 (11-12편)
2.1.3 미완성/템플릿 파일 (13-18편)
13-18번 파일들은 제목과 내용이 매치되지 않으며, 템플릿 형태로 보입니다.