Trong bài này mình sẽ hướng dẫn cách thiết lập môi trường develop Apache Airflow dưới local bằng Docker Compose.
TL;DR Source ví dụ của bài viết này: https://github.com/duyet/airflow-docker-compose
1. Cấu trúc project
Đầu tiên thiết lập cấu trúc project như dưới đây. Thư mục dags
sẽ chứa các DAG python của Airflow.
.
├── dags
│ └── first_dag.py
├── Dockerfile
└── docker-compose.yaml
1.1 Dockerfile
Nội dung file Dockerfile
:
FROM puckel/docker-airflow:1.10.4
COPY dags /usr/local/airflow/dags
# RUN pip install <packages> ...
Dockerfile
ở đây mình kế thừa của tác giả Puckel, COPY
thư mục dags
vào Docker image. Có thể cài thêm các thư viện khác bằng lệnh Docker RUN <cmd>
.
1.2 docker-compose.yaml
Nội dung file docker-compose.yaml
:
version: '2.1'
services:
postgres:
image: postgres:9.6
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
volumes:
- /tmp/postgres-data:/var/lib/postgresql/data
webserver:
build: .
restart: always
depends_on:
- postgres
environment:
- LOAD_EX=n
- EXECUTOR=Local
- AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow
volumes:
- ./dags:/usr/local/airflow/dags
- /tmp/airflow_logs:/root/airflow/logs
ports:
- "8080:8080"
command: webserver
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3
scheduler:
build: .
restart: always
depends_on:
- postgres
environment:
- LOAD_EX=n
- EXECUTOR=Local
- AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow
volumes:
- ./dags:/usr/local/airflow/dags
- /tmp/airflow_logs:/root/airflow/logs
command: scheduler
Docker compose mình thiết lập gồm các service:
- Postgres
- Airflow Webserver
- Airflow Scheduler
Mount thư mục ./dags:/opt/airflow/dags
để link thư mục dags
với thư mục trong Docker instance.
Note: mount thư mục
/root/airflow/logs
để Webserver có thể đọc được logs từ Scheduler.
2. Chạy Docker compose
Tại thư mục project:
docker-compose up
Truy cập Airflow: http://localhost:8080
Từ bây giờ mình có thể viết và test các DAG bằng cách viết trong thư mục dags
.
Chúc các bạn thành công.