0. 관련 포스팅
- [Airflow] Airflow 란?
- [Airflow] Airflow 설치 (with. docker compose)
1. 개요
이번 설치 포스팅은 테스트용으로 Docker 환경에서 Airflow 사용을 목적으로 하고있다.
사용하는 서버 환경이 Docker 환경이라면 동일한 설치 방법으로 진행하여도 무관하다.
Airflow에서 제공하는 Docker Compose 파일을 기반으로 하기 때문에
기존 시스템에 추가적으로 설치하여 사용하고자 한다면 따로 설정을 추가적으로 해줘야한다.
(docker-compose 파일에는 airflow 사용에 필요한 웹서버 및 DB 도 포함하여 설치된다.)
2. 환경
OS : MacOS(Sonoma M1 MacSilicon)
Lang : Python 3.9
Airflow : 2.7.3 (23.12.09 기준)
3. 설치
a. docker-compose.yaml 다운로드
파일을 가져오기 앞서 Docker Volume Mount 하기 위한 로컬 폴더를 따로 만들어주었다.
이 폴더 내에서 작업된 내용이 Container 내 볼륨과 동기화 되어있기 때문에 DAG 파일을 작성하거나 추가하는 Root 폴더가 될 예정이다.
mkdir Airflow
Airflow에서 제공하는 docker-compose.yaml 파일은 아래 명령어로 가져올 수 있다.
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.7.3/docker-compose.yaml'
docker-compose.yaml 서비스 정의 목록
- airflow-scheduler : 모든 Task와 DAG를 모니터링한 다음 종속성이 완료되면 작업 인스턴스를 트리거한다.
- airflow-webserver : 웹 UI를 제공하는 웹 서버
- airflow-worker : 스케줄러가 지정한 작업을 실행하는 컨테이너
- airflow-triggerer : 지연 가능한 작업에 대해 이벤트 루프를 실행
- airflow-init : 초기화 서비스 (Airflow 가 실행한 후 따로 실행시키지 않는 이상 작동하지 않는다)
- postgres : Metadata 를 담고 있는 데이터베이스 (다른 데이터베이스로 변경 가능!)
- redis : 스케줄러에서 작업자로 메시지를 전달하는 브로커
파일에는 Executor가 기본으로 CeleryExecutor로 정의되어 있어 메시지 브로커를 필요로한다.
(내부에 정의된 내용이 꽤 많기 때문에 직접 보는걸 추천한다.)
볼륨 마운트시 동기화될 작업 공간은 다음과 같다.
- ./dags : 작업이 정의된 DAG 파일을 보관하는 디렉토리
- ./logs : 작업 실행 및 스케줄러의 로그가 포함된 디렉토리
- ./config : 사용자 정의 로그를 추가하거나 airflow_local_settings.py 를 추가하여 클러스터 정책을 구성할 수 있다.
- ./plugins : 사용자 정의 플러그인을 넣을수있다.
data 폴더의 경우 DB 볼륨 마운트를 목적으로 생성하였기 때문에 무시하여도 무관하다.
b. 설정
설치에 앞서 몇 가지 작업을 진행하게 되는데 바로 docker compose up 을 하여도 실행되기도 하지만 공식 문서상에 정의된 내용을 기반으로 진행해보려한다.
먼저 AIRFLOW_UID 를 환경변수로 지정해주는 작업이다.
Airflow 컨테이너를 실행할 사용자 UID를 말하는것이며, 기본 UID를 사용하는 것이 아닌 재정의 시 사용하면 된다고 한다.
호스트와 별도의 UID를 가진 사용자의 구분과 컨테이너 및 홈 내부에 Python 라이브러리를 공유하여 기능을 사용하기 위함이라고 하는데 OpenShift 호환성을 달성하기 위한 것이라고 한다.
(아래 Entrypoint 라는 링크를 타고 들어가면 더 자세한 이야기가 써져있으니 참고 바란다.)
echo -e "AIRFLOW_UID=$(id -u)" > .env
AIRFLOW_UID=50000
Entrypoint — docker-stack Documentation
airflow.apache.org
docker-compose 파일에도 기본 값으로 50000 으로 설정되어있으니 참고!
(0으로 매핑된 이유는 0일때 모든 권한을 가지고 있기 때문!)
다음으로 docker-compose.yaml 파일에서 변경하는 부분을 몇가지 수정하려한다.
[AIRFLOW_CORE_LOAD_EXAMPLES] 예제 DAG 목록을 불러올것인지에 대한 부분이다.
처음에 기본으로 예제 목록을 불러오는데 따로 DAG 파일이 있는건 아니고 DB 상에 기록되어 WebUI 상에서 확인이 가능하다.
기본 값은 true 로 되어있고 false 로 설정 시 예제 목록을 가져오지 않는다.
[Postgres image] 버전이 처음에는 13으로 되어있기 때문에 15 버전으로 변경하였고 마운트할 볼륨 위치를 바꿔주었다.
포트 번호가 따로 적혀있지 않았지만 개인적으로 사용하고 있는 DB 포트와 겹치기 때문에 외부 접근 포트 번호를 변경해주었다.
추가적으로 Dockerfile 을 사용하는 경우에는 [build] 부분이 주석처리 되어있는데 해제해주면 된다.
c. docker compose up
개인적으로 수정할 부분이 완료 되었다면 docker compose up 으로 컨테이너 설치를 진행하면 된다.
백그라운드 실행을 원한다면 -d 옵션을 추가해주자.
docker compose up -d
Airflow 컨테이너 설치가 완료되면 정상적으로 볼륨 마운트가 완료된 모습을 볼 수 있고
Docker 를 확인하면 init 을 제외한 컨테이너들이 실행된 모습을 볼 수 있다.
4. Web 접근
웹서버가 정상적으로 작동하고 있기 때문에 http://localhost:8080 에서 Web UI를 사용할 수 있다.
접근을 하면 별도의 계정 변경을 하지 않았기 때문에 아이디와 패스워드가 airflow / airflow 로 되어있고 예제 목록을 불러오는 옵션을 true로 놔두었다면 오른쪽 이미지처럼 예제가 표기 될것이다.
[AIRFLOW_CORE_LOAD_EXAMPLES] 를 false로 설정했을 때는 예제 목록이 사라져있는 모습을 볼수 있다.
5. CLI
Airflow는 Command Line Interface 도 제공하고 있는데 아래 명령어를 입력하면 sh 파일을 받을 수 있다.
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.7.3/airflow.sh'
chmod +x airflow.sh
몇 가지 기능을 제공하니 한번 사용해보길 권장한다.
./airflow.sh info # 정보 호출
./airflow.sh bash # bash로 접근
./airflow.sh python # python 사용
6. DAG 파일 추가
컨테이너의 Airflow 디렉토리랑 마운드된 로컬 디렉토리에서 ./dags 폴더 내에 샘플로 DAG 파일을 추가해주면 된다.
다만 인식하는데 걸리는 시간이 조금 있으므로 넣는다고 바로 적용되지는 않는다.
(docker-compose 옵션 중에 이 시간을 좀 더 짧게 가져가는 것도 가능)
(DAG 파일 예제는 다른 분 코드를 가져와서 적용하였다.)
우측 Actions 컬럼에 [Tirgger DAG] (재생 모양) 버튼을 누르면 수동 실행이 되고
Recent Tasks 에 현재 진행 상태에 대해 간략히 표기가 된다.
7. 마무리
아직은 알아보는 단계여서 이것저것 만져보고 정리해보고 있는데 설치 옵션에 관한 부분은 어떤 옵션이 어떤 특징을 가지고 있는지만 인식한다면 어렵지 않게 설치 가능해보인다.
로컬에 바로 설치하여도 상관 없지만 Docker 같은 컨테이너 환경에 설치한다면 관련 지식도 같이 익혀야하니 너무 성급하게 익히기보다는 천천히 필요한 부분을 하나씩 익혀나가면 좋을것같다.
8. 참고자료
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
Running Airflow in Docker — Airflow Documentation
airflow.apache.org
https://dydwnsekd.tistory.com/106
Airflow Example DAG 제거하기
이번 글에서는 Airflow 설치 시 기본적으로 생성되는 Example DAG를 제거하는 방법에 대해서 알아보도록 하자. Example DAG Example DAG란 Airflow를 설치하고 실행시키면 기본적으로 DAG에 등록되어 있는 DAG
dydwnsekd.tistory.com
https://data-engineer-tech.tistory.com/30
[Airflow] 에어플로우 시작하기: 개념 및 설치
개요 Airflow는 복잡한 워크플로우를 프로그래밍 방식으로 작성해서, 스케줄링하고 모니터링할 수 있는 플랫폼이다. 데이터 파이프라인을 이루고 있는 ETL 스크립트들을 스케줄링 할 때 crontab, clou
data-engineer-tech.tistory.com
[Airflow] docker-compose로 에어플로우 설치하기
초보자들도 과정을 따라하며 쉽게 에어플로우를 개발할 수 있도록 정리한 에어플로우 설치 방법입니다. Dockerfile을 이용하여 필요 패키지를 커스텀하여 이미지로 빌드하는 방법도 함께 정리하
velog.io
'DEV > Airflow' 카테고리의 다른 글
[Airflow] AirFlow 란? (0) | 2023.12.09 |
---|