본문 바로가기

AirFlow/개발

[airflow] 구축기 - 1

 

회사에서 airflow를 구축하고 있다. 구축한 뒤, 흩어져있는 cron 작업들을 통합하여 관리하고자 한다.

 

airflow의 장점은 뭐 너무 많으니 별도로 언급하지 않고, 굳이 단점을 꼽자면, SPOF로 동작하기 때문에 지속적인 관리가 필요하다는 점과 회사 입장에서는 Airflow를 다룰 수 있는 인력이 필요하다는 점 정도일 것이다. 

 

 

0. 도입 배경

- 사실, 아직 회사의 규모가 작기 때문에 굳이 Data work-flow에 대한 Orchastration 툴이 필요한지에 대한 의구심이 있었다.

- 회사에서는 현재 웹서비스를 EKS 위에서 돌리고 있고, 쿠버네티스를 쓰고 있으므로 Airflow (on k8s)를 도입하는 것이 자연스러운 것이라고 생각했다. 

- 데이터 중심적인 문화를 가져가기 위해선 이러한 좋은(?) 툴 도입이 필수적이라고 생각했다.

- 예를 들어, 마케터가 대량 예약 문자발송할 일이 있을 때, cron이 잘 돌았는지 몇건이나 실패했는지 개발팀에 일일이 확인하지 않아도 되고, 또 필요한 경우 본인이 재시도를 누를 수도 있지 않을까 하는 단순한 생각이 출발이 되었다.

- 실제로 Airflow를 테스트하면서(글을 쓰는 시점 현재 테스트 과정) 느끼는 바는 사방에 흩어진 Data Workflow를 하나로 모으는 것도 물론 중요하지만, 1) 그러한 Workflow를 모으면서 이루어지는 표준화와 2) 어느 정도 표준화한 이후 데이터가 흐르는 문화가 확산되는 것이 훨씬 더 중요한 것 같다는 생각이 든다. 말그대로 orchestrated form을 갖추게 되면, 그 다음을 생각하게 되는 것이다. 이런 작업이 추가되어야 겠는데? 하면서 말이다.

- 사용자 친화적으로 1차 구현되고 난 뒤, 간단한 DAG은 기획자, 마케터까지 만들 수 있었으면 한다. 

 

1. 미리 알면 좋은 것들

내가 Airflow를 구현한 방법은 다음과 같다. Data Engineering 쪽 작업은 처음이라 여러 시행착오들이 많았다. 따라서, 아래 개념들을 먼저 공부하면 구현이 좀 더 용이할 수 있다. (나같이 처음인 경우에는 더더욱)

머신러닝을 하고 있는 입장에서 MLOps 같은 일과 직군도 멋진 일이라는 생각이 들었다. (더 공부하자)

 

  • 구현 방법 : Private git-hub에서 Airflow helm chart(일부 커스텀)를 땡겨와서 argoCD를 통해 EKS로 자동 배포
    아래 내용들을 먼저 알면 구현에 도움이 된다.
    • Airflow 동작 원리 (Scheduler > Worker > Task Process)
    • k8s 기본 개념
    • KubernetesExecutor, KubernetesPodOperator 등
    • k8s yaml 파일 다루기
    • Helm chart or Kustomize 를 통한 배포
    • CI/CD (Container Image Build & Push, kubectl apply)
    • GitOps (ArgoCD) 
    • Cloud 관련 (AWS, GCP 등)

  

2. 트러블 슈팅

도입을 계획할 때의 예상은 한 1~2주면 될거라고 생각했는데, 아무래도 조금 더 걸릴 것 같다. 

(항상 그렇지만) 예상 외 트러블 슈팅이 너무 많았다. 일부는 다음 글에서 자세히 설명하겠지만, 다음과 같은 문제점들이 있었음.

 

  • Docker-compose를 이용해서 쉽게 배포 성공, helm(Artifact에서 가져온 Airflow-helm 이미지) 그냥 install로도 쉽게 배포 성공했으나, 유독, ArgoCD를 사용할 때 이슈가 많았음. ArgoCD를 통한 Git-Ops를 처음 구현하는 것도 있지만, ArgoCD가 가진 버그나 한계에 의한 경우도 있었음.
    • ArgoCD는 아직까지 chart 와 values.yaml을 다른 Source에서 가져오지 못함. :melting_face: 구글링해보면 해결하는 방법들이 있는 것 같으나, 계속 오류가 나서 포기함.
    • ArgoCD는 helm chart를 활용해 배포하지만, 실제로 helm install이 아니고, kubectl apply를 적용함. 따라서, 설치가 완료된 이후에도 helm list 해보면 조회되지 않음.
      (관련 정리 : https://jenakim47.tistory.com/77)
    • Application이 만들어지지 않는 건, 정말 많은 이유가 있겠지만, values.yaml 파일에 typo 실수인 경우가 대부분임 (혹은 다른 차트의 values.yaml을 가져왔을 수도,,,)
  • 우여곡절 끝에, ArgoCD를 통해 Airflow를 EKS에 배포하고 난 뒤, DAG Run에서도 오류가 많았음.
    • 가장 기본적인 실수는 pip install임. pandas, numpy 등 기본적인 패키지 설치가 안되어있는 경우 DAG이 stuck할 수 있음.
    • 여러 config settings (예를 들어, xcom을 사용하고자 하면, 활성화해야한다던지,,)
  • 기타 트러블 슈팅
    • AWS 권한 문제
    • EKS 보안그룹, VPC
    • EKS Load Balancer
    • ECR에서 이미지 땡겨오기

 

3. 참고자료

쏘카 구축기 : https://tech.socarcorp.kr/data/2021/06/01/data-engineering-with-airflow.html

라인 구축기 : https://engineering.linecorp.com/ko/blog/multi-tenancy-airflow-1

ArgoCD 배포 : https://jenakim47.tistory.com/77

Git-Ops : https://coffeewhale.com/kubernetes/gitops/argocd/2020/02/10/gitops-argocd/

웹서버 열기 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-load-balancers-troubleshooting/

마개 님(유튜브도 좋음) : https://magaetube.github.io/data/Airflow-Setup-Step-Intro/

 

이외에도 수없이 많은 좋은 자료들 & 구글링

 

 

1편은 여기에서 줄이고, 

2편부터는 어떻게 pipeline을 만들었고, 트러블슈팅을 어떻게 해결했는지 자세히 다뤄보도록 하겠다.

 

 

끗.