알아볼 내용
- Docker를 활용한 Airflow 실행
- DAG 파일 예시
1. Airflow 실행하기 with Docker
Docker를 통해서 Local에서 간단하게 Airflow 환경을 구축할 수 있다
공식 documentation에서 친절하게 설명해주고 있기 때문에 쉽게 따라할 수 있다
# 1. docker-compose.yml 다운로드
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/3.0.6/docker-compose.yaml'
# 2. docker container와 연결할 폴더 생성
mkdir -p ./dags ./logs ./plugins ./config
# 3. .env 파일에 AIRFLOW_UID 세팅 (필수는 아님)
echo -e "AIRFLOW_UID=50000" > .env
# 4. 백그라운드로 airflow 실행
docker compose up -d
다음과 같이 모든 서비스가 ‘healthy’ 상태가 되면 정상적으로 동작한 것이다
그리고 http://localhost:8080
로 접속해서 ID, PASSWORD 모두 airflow를 입력하면 UI를 확인할 수 있다
docker-compose.yml
에서 ‘x-airflow-common’ 의 environment를 보면 AIRFLOW__CORE__LOAD_EXAMPLES
옵션의 기본값이 True이기 때문에 ‘Dags’를 클릭했을 때 예시 Dag가 많이 있을 것이다
필요없는 경우 False로 해놓는다
Docker 환경이 어떻게 구성되는지에 대한 내용은 2.10.5 버전이긴 하지만docker-compose.yml
의 내용을 정리한 글을 참고하면 도움이 될 것이다
2. 간단한 DAG 파일 생성
DAG에 대한 자세한 설명은 추후에 알아보고 여기서는 간단하게 터미널에 “Hello”와 “Bye”를 출력하는 DAG 파일을 만들어보자
from datetime import timedelta
import pendulum
from airflow.operators.bash import BashOperator
from airflow.sdk import DAG
# 기본 인수 정의
default_args = {
"owner": "airflow", # Dag 소유자
"depends_on_past": False, # 이전 실행 결과에 의존할지 여부
"email": ["tjdals4047@gmail.com"], # 실행 실패 시 이메일 알림 수신자
"email_on_failure": False, # 실행 실패 시 이메일 알림 여부
"email_on_retry": False, # 실행 재시도 시 이메일 알림 여부
"retries": 1, # 실행 재시도 횟수
"retry_delay": timedelta(minutes=5), # 실행 재시도 딜레이
}
# DAG 정의
with DAG(
dag_id="hello_bye_dag",
default_args=default_args,
description="터미널에 Hello와 Bye를 순차적으로 출력하는 DAG",
schedule="0 0 * * *", # 실행 주기 (매일 0시 0분)
start_date=pendulum.datetime(2024, 1, 1, tz="UTC"), # 실행 시작 일시
catchup=False, # 지난 실행 기록을 처리할지 여부
tags=["example", "hello_bye"], # DAG 태그
) as dag:
print_hello = BashOperator(
task_id="print_hello",
bash_command="echo 'Hello'",
)
print_bye = BashOperator(
task_id="print_bye",
bash_command="echo 'Bye'",
)
# 태스크 의존성 설정
print_hello >> print_bye
/dags
폴더에 hello_bye.py
를 넣고 UI 에 접속하면 아래와 같이 새로운 DAG가 보인다
보이지 않을 경우, scan하는 시간이 필요하기 때문에 조금 기다려야한다
DAG 이름, Schedule, Tags 등의 정보를 확인할 수 있고 왼쪽의 버튼을 토글하면 DAG를 실행시킬 수 있다
실행시킨 후 DAG 이름을 클릭하면 각 Task 별로 성공, 실패 여부와 모든 history를 확인할 수 있다
각 Task를 클릭하고 Log를 확인하면 Hello, Bye가 출력된 것을 볼 수 있다