최근에 팀 airflow 프로젝트를 컨테이너 기반으로 전환하면서 런타임에 디버깅하는 환경을 별도로 구축했어야했는데 Remote – containers 플러그인을 이용하면 운영환경에서 크게 변경없이 디버깅할 수 있어서 사용방법을 간단히 정리해본다. 이 확장을 이용하면 디버깅 용으로 별도 로컬 환경을 구축하지 않아도 컨테이너로 관리하는 서비스들을 운영 이미지 그대로 디버깅할 수 있는데, 아직 preview 버전이긴 하지만 사내에서 사용하고 있는 airflow 이미지 기준으로 […]
Airflow 2.x HA 구성 (3 node docker 환경)
airflow 2.0 에서 공식적(?)으로 HA 를 지원한다. 1.x 버전에서는 scheduler 프로세스를 동시에 여러개 구동하면 작업이 중복 실행될 수 있는 위험이 있었서 무조건 single 로 운영해야했고 이 때문에 가용성을 보장할 수 없었는데 2.x 에서부터는 row-level locking 을 이용해서 multiple scheduler 이용이 가능하도록 개선이 됐다. (대신 SKIP LOCKED 또는 NOWAIT 구문을 지원하는 mysql8.0 이상을 써야하는 제약조건이 있다.) […]
[Airflow] execution_date 이해하기
Airflow DAG는 Jinja Macro 로 구현돼 있는, 사전 정의된 값들을 가져다가 사용함으로써 좀 더 다이나믹하게 구현할 수 있다. Airflow Macros reference 그 중에서도 execution_date 를 가장 자주 사용하게 되는데 이 매크로는 DagRun, TaskInstance 가 instantiated 될 때 값이 정해지면서 특정 인스턴스에 정해진 날짜 값을 갖게 해주기 때문에 추후 재작업 등을 하는데 용이하게 쓰인다. 그런데 이 […]
[Airflow] RBAC
RBAC; Role-Based Access Control 참고: https://airflow.apache.org/docs/stable/security.html#rbac-ui-security Airflow 1.10.9 버전 이후 Web UI가 Flask-Admin에서 Flask-Appbuilder 기반으로 변경되면서 RBAC를 활성화할 수 있다. 다음과 같이 다섯개의 Role 이 정의돼 있고 이 외에도 커스텀 롤을 생성할 수 있다. Admin Op User Viewer Public 각 Role들은 아래와 같은 형태의 권한들의 집합인데 세부 권한들은 다음과 같은 형태로 정의 돼 있어서 […]
[Airflow] 1.10.10 싱글 설치
rbac 기능을 이용하면 DAG-level Access Control 이 가능하다고 한다. 새롭게 추가된 tag 기능에 더해져서 tag-level 권한 관리도 됐으면 좋았겠지만.. rbac 기능을 이용하면 기본적 제공되는 롤 뿐만 아니라 Customized role 을 통해 가능해질 사용자 권한 관리를 기대하며 최신 1.10.10 버전을 설치해본다. 기존에 LDAP 연동해서 사용하던 Airflow 시스템을 업그레이드 해서 사용할 수 있을지 확인해보기 위해 OpenLDAP 환경을 […]