[Airflow] docker-compose로 에어플로우 설치하기

Hello! ·2023년 2월 21일
2

Airflow

목록 보기
3/3
post-thumbnail

Apache-Airflow를 사용하기 위해서 도커를 이용하여 설치하는 방법을 정리한 내용입니다.

시작하기 앞서, 준비!

  • Docker Commuitiy Edition 설치(최소 4GB memory 이상)
  • Docker compose v1.29.1 이상 혹은 최신 버전 설치


1. docker-compose.yaml 파일 다운로드


  • Docker compose로 Airflow를 개발하기 위해서는 docker-compose.yaml파일을 설치해야함
    • curl이라는 명령어는 프로토콜들을 이용해 URL 로 데이터를 전송하여 서버에 데이터를 보내거나 가져올때 사용하기 위한 명령줄 도구 및 라이브러리임
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
  • 설치가 완료되면 아래와 같이 docker-compose.yaml 파일이 생성됨
  • docker-compose.yaml 내 서비스

    • airflow-scheduler : 모든 task와 DAG를 모니터링

    • airflow-webserver : 에어플로우 웹 서버. http://localhost:8080

    • airflow-worker : 스케줄러로부터 부여된 테스크들을 실행하기 위한 워커

    • airflow-init : 서비스 이니셜라이제이션

    • postgres(DB) : 데이터 베이스

    • redis : 스케줄러에서 워커로 메시지를 보내는 브로커
      * 서비스는 Celery Executor로 실행됨

      (참고) JSON형태가 익숙하다면, YAML -> JSON 포맷으로 변환하여 확인하면 좀 더 이해하기 쉬움 (링크)



2. 도커 컨테이너 띄우기


  • docker compose up 코드로 멀티 컨테이너 서비스 띄우기

    docker-compose up 
    • docker ps 명령어로 현재 띄어진 서비스별 컨테이너를 확인할 수 있음
  • 컨테이너의 폴더는 마운트됨 → 컴퓨터와 컨테이너간의 일치
    (yaml파일 내 volume 항목 안에 각각의 directory를 매치해주면 됨)
    - ./dags : Dag file 디렉토리
    - ./logs : task 실행 과 스케줄러의 로그 파일
    - ./plugins : 커스텀 플러그인(링크)

  • Option

    • flower앱 컨테이너도 함께 사용하기 (--profile flower 추가)
      • 환경을 모니터링함

      • http://localhost:5555

        docker compose --profile flower up 
        혹은 
        docker compose up flower



3. Initializing Environment


  • 에어플로우 개발 전 환경 구성과 유저 권한을 셋팅해야함

(1) 에어플로우 유저 권한 셋팅

mkdir -p ./dags ./logs ./plugins # mkdir -p 옵션 : 여러 하위 디렉토리를 생성시에 사용한다.
echo -e "AIRFLOW_UID=$(id -u)" > .env

AIRFLOW_UID=50000
  • 유저 권한 입력이 안될 시 이런 WARN이 뜸

(2) 에어플로우 DB초기화

docker-compose up airflow-init

(3) CLI RUN

  • Airflow command를 실행시키기 위해서는 두가지 방법이 있음

    1. CLI에 docker-compose run airflow-worker airflow info 입력
      curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/airflow.sh'
      chmod +x airflow.sh
    1. Mac 또는 Linux의 경우에는 아래 코드 실행 후 sh파일로 실행시킴

      curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/airflow.sh'
      chmod +x airflow.sh

      위 코드 실행시 airflow.sh 파일이 생성됨

      ./airflow.sh airflow info
  • 1, 2번 모두 실행시 아래와 같은 동일한 결과를 얻을 수 있음

(4) Webserver 접속하기

  • 디폴트로 설정된 http://localhost:8080 링크로 접속
  • 디폴트 계정과 비밀번호인 airflow로 접속함
  • 풀 목록 검색 요청 curl
ENDPOINT_URL="http://localhost:8080/"
curl -X GET  \
    --user "airflow:airflow" \
    "${ENDPOINT_URL}/api/v1/pools"

  • 잘못된 정보를 입력했을 때 → Unauthorized로 에러 메시지를 보냄



4. 컨테이너 stop or delete image


docker compose down --volumes --rmi all



5. yaml&Dockerfile로 이미지 커스텀하는 방법


  • 확장된 이미지를 사용할 때(새로운 파이썬 패키지 추가, airflow provider 최신 버전 업그레이드 등) 이미지를 커스텀할 수 있음

  • 아래 예시는 에어플로우 개발을 위한 docker-compose.yaml 파일에 airflow-code-editor를 설치하기 위한 과정을 정리함

    1. docker-compose.yaml 파일 내 build : . 명령어를 추가
    • 기본적으로 ymal파일 내의 build 명령어는 주석처리가 되어있음 -> 해제
    • 주석을 제거함
    1. Dockerfiledocker-compose.yaml 파일 위치에 추가

      • airflow-code-editor 패키지를 설치하는 명령어를 Dockerfile 내에 기재 (명령어 참고 문서)

        FROM apache/airflow:2.5.1-python3.8
        RUN pip install airflow-code-editor
    2. 두 파일이 있는 위치에서 docker-compose build 명령어를 통해 이미지를 빌드

      • 기존 에어플로우와 Dockerfile을 이용하여 airflow-code-editior 패키지를 설치하여 이미지를 생성

        docker-compose build

    3. 빌드된 도커 이미지를 실행

      docker-compose up 

    4. 결과 확인

      • 기본 웹서버에 존재하지 않는 DAGs Code Editor 생성됨

profile
Let's study

2개의 댓글

comment-user-thumbnail
2024년 5월 27일

큰 도움이 되었습니다! 감사합니다

1개의 답글