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 Guide 를 참고하여 교정 및 보강 PR 을 주신다면 진심으로 감사드리겠습니다.
참가신청
- 페이스북에서 보고 밋업앱에서 참가신청 / aws 입주건물 출입이 까다로우니 밋업 안내에 따라 2틀전에 신청해야 함 - 아니면 보안 통과 까다로움 / 배움앞에 포기란 없지!
pip
- 분석 관련 팩키지를 airflow 가 돌기전에 docker 에서 미리 설치함
ECS
- EC2 와 달리 블루그린 배포만 가능함 - 블루그린이 서비스가 다 떠야 해서 느림
Inplace DAG 배포
- 스케줄러가 이미 주기적으로 DAG 를 폴링
- DAG 디렉터리 내부만 덮어쓰면
Codebuild
- 빌드속도를 빠르게 할려고 EFS 를 마운트 시켜두고 Codebuild 복사
- 배포속도 70초 완성
- 모든 인스턴스가 EFS 가 공유하므로 한 곳에 복사하면 끝!
서비스는 블루그린으로 배포해도 무방
Airflow 의존성 라이브러리
- 기본으로 깔면 뭔가 많이 설치한다.
- 생각보다 많은 패키지가 많이 설치되어 있다.
- pendulum - 날짜의 덧샘 뺄샘 타임존
- tenacity - @retray - 알아서 다시 실행 - dag 가 빨강이 되는 일이 없다
자동화란
- 자동화의 추상화만 잘되어 있으면 중복 작업이 없어진다.
- 메타데이터를 만드는 것이 추상화
- 만들어진 메타데이터가 ... 그것이 자동화
서비스 검색
- ECS 의 기능 중에 federman.wanted ... 라우터13에 연결되어 내부 서비스에 접근이 가능하다. 이상한 ip 매번 안치고 들어가도 된다.
타 팀과의 협업
- 코드가 커밋되면 알아서 돈다.
- db 만 제공하고 api 는 각자 만들어라. - api 까지 만들면 장애대응 까지 해야 하니까 / 그건 개발자의 일~
데이터팀의 구성
- 애자일이 성숙화 되지 않았다. 아직
- 로우 데이터만 있으면 잘못 되더라도 다시 쭈욱 돌리면 다시 된다.
- 로우 데이터가 없으면 작업을 다시할때 일이 커진다 - 로우 데이터를 피처스토어에 저장했다
- 데이터팀은 제품도 아니고 비지니스도 아니다. 그래서 모호하다. 데이터팀이 제품팀에 들어간 곳도 많지만 ...
- 각자 조그만 회사에서 혼자 일하다 보니 히스토리를 전승하지 못하여 오늘 같은 공유 자리가 좋은거 같다
질문/답변
매일 덤프로 데이터를 넣는다고 하는데요. 중복 데이터 문제는 ? 멱등성 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 가 실패한
센트리 sentry 는 모니터링 툴이다. 그쪽으로 데이터를 넣으면 알아서 알람을 보내준다.
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, 관계형 데이터베이스와 같은 구조화된 데이터 저장소 간에 대량 데이터를 효율적으로 전송하도록 설계된 도구 을 활용(네이버 예)
녹화본은 YouTube AWS 한국사용자모임 - AWSKRUG에 올릴 예정.