Helm으로 설치한 Airflow에 MongoDB provider 추가

1 분 소요

Helm으로 설치한 Airflow에 MongoDB connection을 추가하려했는데 MongoDB는 없었습니다. 공식 문서(링크)를 찾아보면 pip로 추가하라고 되어있지만 Helm으로 설치한 Airflow에 추가하려면 image를 새로 build해야합니다. 아래는 그 과정과 MongoDB Connection을 추가하는 방법을 설명하겠습니다.

Airflow Image Build

MongoDB provider를 추가하기 위해서는 기존 airflow image에 provider를 추가해서 빌드해야합니다. 저는 Harbor를 사용하고 있어서 빌드된 image는 Harbor에 올렸습니다.

# Dockerfile
FROM apache/airflow:2.4.1
RUN pip install --no-cache-dir apache-airflow-providers-mongo
$ docker build -t HARBOR_URL/project_name/airflow/airflow:2.4.1-ap1
$ docker push HARBOR_URL/project_name/airflow/airflow:2.4.1-ap1


Helm 재배포

이제 Helm에 배포돼있는 airflow values를 수정하겠습니다. 기존 values를 가져와서 아래 images 부분을 추가합니다.

$ helm get values airflow --namespace airflow > airflow-values.yaml
$ vi airflow-values.yaml
...
images:
  airflow:
    repository: HARBOR_URL/project_name/airflow/airflow
    tag: 2.4.1-ap1

이제 Helm에 배포된 airflow를 재배포합니다.

$ helm upgrade airflow apache-airflow/airflow --version 1.7.0 --namespace airflow -f airflow-values.yaml


provider 설치 확인 및 Connection 추가

이제 airflow webserver에 들어가봅니다. Admin > Providersapache-airflow-providers-mongo가 추가된 것을 볼 수 있습니다. 이제 Connection을 추가합니다.

위에서 PasswordExtra 부분이 중요합니다.

  • Password
    • 비밀번호를 그냥 입력하면 RFC 3986 오류가 발생합니다. 그래서 아래 Python 코드로 변환해서 %로 변환된 문자열로 입력해야합니다.
    • import urllib.parse
      
      print(urllib.parse.quote('user!@#$'))
      
      
      # 출력
      user%21%40%23%24
      
  • Extra
    • 그냥 사용하면 인증 오류가 발생하기 때문에 {"authSource": "admin"}을 추가해줍니다.


Reference

댓글남기기