Airflow + ECS + Bigquery

2022/12/14 19:00 ~ 21:00, in AWS Korea

  • https://www.facebook.com/groups/awskrug 에서 진행
  • AWSKRUG -> AWS KOREA USER GROUP
데이터팀에서 Amazon ECS 로 Airflow 홀로 서기 - 최종원(원티드랩)
혼자서 데이터 분석 클러스터를 운영하는 입장에서
Amazon ECS 를 활용하여 데이터팀 내에 Airflow 인프라와
비즈니스 코드를 분리하고 안정적인 문화로 정착시킨 사례를 소개합니다. 
운영하면서 발생한 기술적 이슈를 해결하는 과정뿐만 아니라
팀 문화 및 프로세스 관점으로도 살펴봅니다.
  • 속기록 버전으로 오타 및 오기가 좀 있습니다. 참가자 분들의 기억 소환을 위해 작성되었습니다.
  • Collaboration Guideopen in new window 를 참고하여 교정 및 보강 PR 을 주신다면 진심으로 감사드리겠습니다.

awskrug airflow

참가신청

  • 페이스북에서 보고 밋업앱에서 참가신청 / aws 입주건물 출입이 까다로우니 밋업 안내에 따라 2틀전에 신청해야 함 - 아니면 보안 통과 까다로움 / 배움앞에 포기란 없지!

pip

  • 분석 관련 팩키지를 airflow 가 돌기전에 docker 에서 미리 설치함

ECS

  • EC2 와 달리 블루그린 배포만 가능함 - 블루그린이 서비스가 다 떠야 해서 느림

Inplace DAG 배포

  • 스케줄러가 이미 주기적으로 DAG 를 폴링
  • DAG 디렉터리 내부만 덮어쓰면

Codebuild

  • 빌드속도를 빠르게 할려고 EFS 를 마운트 시켜두고 Codebuild 복사
  • 배포속도 70초 완성
  • 모든 인스턴스가 EFS 가 공유하므로 한 곳에 복사하면 끝! awskrug efs

서비스는 블루그린으로 배포해도 무방

Airflow 의존성 라이브러리

  • 기본으로 깔면 뭔가 많이 설치한다.
  • 생각보다 많은 패키지가 많이 설치되어 있다.
  • pendulum - 날짜의 덧샘 뺄샘 타임존
  • tenacity - @retray - 알아서 다시 실행 - dag 가 빨강이 되는 일이 없다

자동화란

  • 자동화의 추상화만 잘되어 있으면 중복 작업이 없어진다.
  • 메타데이터를 만드는 것이 추상화
  • 만들어진 메타데이터가 ... 그것이 자동화

서비스 검색

  • ECS 의 기능 중에 federman.wanted ... 라우터13에 연결되어 내부 서비스에 접근이 가능하다. 이상한 ip 매번 안치고 들어가도 된다.

타 팀과의 협업

  • 코드가 커밋되면 알아서 돈다.
  • db 만 제공하고 api 는 각자 만들어라. - api 까지 만들면 장애대응 까지 해야 하니까 / 그건 개발자의 일~ awskrug efs

데이터팀의 구성

  • 애자일이 성숙화 되지 않았다. 아직
  • 로우 데이터만 있으면 잘못 되더라도 다시 쭈욱 돌리면 다시 된다.
  • 로우 데이터가 없으면 작업을 다시할때 일이 커진다 - 로우 데이터를 피처스토어에 저장했다
  • 데이터팀은 제품도 아니고 비지니스도 아니다. 그래서 모호하다. 데이터팀이 제품팀에 들어간 곳도 많지만 ...
  • 각자 조그만 회사에서 혼자 일하다 보니 히스토리를 전승하지 못하여 오늘 같은 공유 자리가 좋은거 같다

질문/답변

  • 매일 덤프로 데이터를 넣는다고 하는데요. 중복 데이터 문제는 ? 멱등성 rdb 미러링 -> 리플레이스 하여 중복해결 cdc -> mysql ... 빅로그를 디비로 저장하면서 멱등성을 보장했다. / 서비스 디비가 아니니까 있는걸 다 지우고 / 하루마다 전체를 다 ... 해서 중복을 피했다. 서비스가 아니므로 가능했다.

  • rds 에 있는 스냅샷을 s3 로 parquet 로 만들어서 - 해당 api 에도 멱등성 옵션이 있어서 중복된 시간에 돌리면 알아서 안돌고 처리가 된다.

  • 분석가들이 로컬에서 테스트 한다고 하는데 코어부분 테스트는 어떻게 하셨나요? 코어 부분도 비슷하게 하였다. 테스트 프레임워크도 중요하지만 github action 으로 ci 를 구축했고 센드박스 환경을 만들어서 ... 했다. 주로 서드파티 관련 에러가 나는 문제는 cli 를 똑 같이 실행하면 다시 문제가 발생하여 처리 가능했다.

  • 로컬에서 분석가들이 개발을 하고 리뷰를 받아서 최종적으로 ecs 올려서 사용한는데 로컬에서 문제 없던 것이 ecs(docker) 환경에서 문제 되는것은 없엇나? 그런 적은 별로 없엇다. pip 가 동기화 되도록 서버 환경과 같이 강제로 업데이트를 개발자 환경에 실행 되도록 하였다. 테스트가 똑같이 돌아가는 것도 중요하지만 ci 쪽으로 테스트를 작성하여 풀엇다.

  • ecs 컨테이너 크기는 어떻게 되나? 한 1G 2G pip 만 하는 것은 1G - 컨테이너 뜨는 속도는 많이 느리지만 매번 업데이트는 없어졌다. 이렇게 하면 최신을 설치하게 된다.

  • 넘파이 같은 것들이 분기에 한번은 디펜던시 문제로 속썩이는 적이 있다 - AMI 로 구워버리기도 하지만 ... 그것이 답은 아닌거 같다.

  • airflow 의 사용 디비인 메타스토어의 이중화를 했나? 운영하다 보니 airflow 버그로 잘못된 정보가 메타스토어에 들어가면 airflow 가 죽는 문제가 있었다. 어떻게 했나? 디비에서 직접 지워주지 않으면 계속 dag 가 죽어있다. 이 문제를 어떻게 해결했나? rds 서비리스 사용하여 ha 고민은 하지 않았다.

  • 딥큐라는 라이브러리를 사용해서 시간단위로 ...

  • 타임싱크 - dag test ... ? 이그잼플 dag 를 테스트 2.0 부터 ... 안도는 테스크가 있을 수 있죠. 리펙토링 한번 하면 원본 dag 가 바뀌고

  • task 가 실패하면 콜백으로 슬랙으로 보내줄수 있지 않나? 왜 그렇게 하지 않았나? 분석가가 보지 않아 구성하지 않았다. 실패한 작업은 센트리로 보내고 최소한 dag 를 최소한 간소하게 만들어 운영함 / 그래서 단순한 dag 가 실패한

  • 센트리 sentryopen in new window 는 모니터링 툴이다. 그쪽으로 데이터를 넣으면 알아서 알람을 보내준다.

  • ecs 에서 스파크를 쓰시나요? 안써요.

  • 비용절감은 어떻게 하셨나요? 파게이트 빅쿼리로 보다 최소한의 램을 구성해서

  • 빅쿼리로 밀어 넣는 데이터 양은? 안생각봤다 구글에서 넣는건 무료라 ...

  • 버전업 할때 200개 dag 가 있다고 하셨는데 문제가 없나요? 노하우가 있을까요? 스테이징 영역이 따로(2개 만들어) 있어서 거기 먼저 올려서 에러를 잡고 갔다. 프로덕션에도 나지만 이렇게 걸러지면 많이 줄어든다.

  • ec2 에서 ecs 로 전환 하는데 얼마나 걸렸나? 안정화는? 3개월 efs 문제 클라우드워치도 ... eks 로 했다면 더 오래 걸렸을 것이다.

  • ec2 닭잡는 ecs 소잡는칼 eks 기관총

  • airflow + 빅쿼리(?) + 서드파티 문제가 있다. 한달전쯤 빅쿼리와 관련된 발표를 한다.

  • ecs 가 삶의 질을 향상시켜 주니까 - 버전이 너무 옛날이다. 파이썬 3.12 를 쓰고 싶다. 빠르다니까. 스테이징에 올려서 테스트 하고 있다.

  • 3.12 등 올리면 전체 dag 테스트 하느냐? stg 에서 모드 한다.

  • 저의 같은 경우는 test dag 를 정의하고 off 해두고 분석가가 짠 스크립트를 pr 로 올려두고 on 하면 돌아가도록 되어 있다. - emr 로 airflow 돌리니까 로딩만 오래걸려서 하기때문에 분석가들이 싫어한다.

  • ecs 를 썻기때문에 로컬에서 돌면 똑같이 돈다. 멱등성만 신경써서 ... emr 아닌거라 ... ecs 를 emr 처럼 썻다. 그리고 대부분 자원은 빅쿼리로 썻다. 쿼리를 해두면 임시테이블이 만들어 지거나 이런 작업은 1cpu 8g 메모리

  • 스팟으로 해도 되지 않나요? 안해봤지만 조망간 벡로그에 들어갈것이다.

  • 자동차 부붐 공정에서 자체 운영중인 oracle 등 rdb 의 증분 데이터를 일배치로 AWS 에 올리는 방법은? Apache Sqoop, 관계형 데이터베이스와 같은 구조화된 데이터 저장소 간에 대량 데이터를 효율적으로 전송하도록 설계된 도구open in new window 을 활용(네이버 예)

  • 녹화본은 YouTube AWS 한국사용자모임 - AWSKRUGopen in new window에 올릴 예정.

awskrug efs

Last Updated: