[Airflow] Docker-Compose Airflow 시스템에 외부 패키지 추가하기!

NewNewDaddy·2025년 1월 9일
0

AIRFLOW

목록 보기
2/2
post-thumbnail

🔹 0. INTRO

  • 간단히 Airflow 시스템을 사용하려면 일반적으로 Docker Compose를 활용하여 구축하게 됩니다. 이 경우 Airflow는 Docker 컨테이너 내부에 설치된 Python 패키지들만 불러와 작업할 수 있습니다.
  • 예를 들어, 비동기 작업을 위해 asyncioaiohttp 같은 라이브러리를 사용하려 할 때, 해당 라이브러리들이 Airflow Docker Compose 컨테이너 내부에 설치되어 있지 않다면, 이를 활용한 코드는 정상적으로 작동하지 않습니다.
  • Airflow 시스템 설치 시 기본적으로 다양한 Python 라이브러리가 포함되어 있지만, 추가적인 라이브러리가 필요할 경우 해당 시스템에 직접 설치해주어야 합니다.
  • 이번 글에서는 기존 Airflow 시스템에 없는 Python 라이브러리를 어떻게 설치할 수 있는지, 그리고 Airflow UI의 Connection 항목에 없는 연결을 어떻게 추가할 수 있는지 알아보겠습니다.

🔹 1. Python 라이브러리 추가 설치

  • 원론적으로 생각하면 Airflow 시스템을 구성하고 있는 airflow 관련 4개의 컨테이너(scheduler, triggerer, webserver, worker) 모두에 python 라이브러리가 설치되면 될 것입니다. 하지만 이는 작업이 번거롭고, docker compose 가 down되면 또 새롭게 작업을 반복해줘야 하는 불편함이 있습니다.
  • Docker Compose YAML 파일에서 생각보다 간단히 문제를 해결할 수 있습니다.
  • YAML 파일의 _PIP_ADDITIONAL_REQUIREMENTS 환경변수에 필요한 패키지를 아래와 같이 추가해주고 docker compose up을 해주면 됩니다. 예를 들어, duckdb, polars, aiohttp 패키지 설치가 필요한 상황이라면 이렇게 작성합니다.

    _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-duckdb polars aiohttp}

  • 작성 후 docker compose up을 하게되면 컨테이너가 뜰 때 추가 라이브러리들이 설치되기 때문에 airflow 시스템에서 해당 라이브러리를 활용한 코드를 정상적으로 사용할 수 있습니다.

🔹 2. 외부 Provider 추가 설치

▪ 1) Provider 확인

  • Provider는 MySQL, AWS, GCP, Spark 등 외부 시스템을 Airflow에 연결하여 Dag에서 사용할 수 있도록 해주는 것입니다.
  • 예를 들어, MySQL Provider를 활용하면 python으로 MySQL에 대한 connection 코드를 따로 개발하지 않고도 MySQL 작업이 가능한 Operator나 Hook 등을 사용할 수 있습니다.
  • Airflow에서 지원하는 Provider 전체 목록은 Providers packages 링크에서 확인이 가능하며, 현재 작동중인 Airflow 시스템에서 지원되는 Provider 목록은 Admin-Connections-Add Connection 항목의 드롭다운 메뉴에서 확인 가능합니다.

▪ 2) Provider 추가

  • Providers packages 링크에서 추가를 원하는 Provider를 선택하면, 설치해야하는 python 라이브러러리 명령어를 볼 수 있습니다.
  • 예를 들어, Apache Kafka를 선택하면 아래와 같이 pip install에 필요한 라이브러리 이름이 나옵니다.
  • apache-airflow-providers-apache-kafka 이 라이브러리를 docker compose YAML 파일의 _PIP_ADDITIONAL_REQUIREMENTS 환경변수에 추가하여 시스템을 재시작해주면 됩니다.
  • 그러면 아래와 같이 connection 목록에 이전에는 없던 외부 Provider가 추가되어 보이는 것을 확인할 수 있다.

🔹 3. OUTRO

  • 처음에 Docker Compose로 Airflow 시스템을 실행시킬 때, 필요한 python 라이브러리들이나 기존에 지원되지 않는 외부 provider 들을 어떻게 추가할지에 대한 고민이 많았습니다. Container에 들어가서 설치를 해주거나, 특정 라이브러리가 포함된 커스텀한 airflow 이미지를 생성하는 등 약간의 번거로움이 필요한 몇 가지 방법들을 선택해도 되지만 위에서 소개한 방법이 가장 간편하고 효율적인 방법이 아닐까 생각됩니다.
  • Airflow 시스템을 커스텀하여 사용하는 것에 한 발짝 더 익숙해진 것 같은 느낌이 드네요!😁
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

0개의 댓글