개요
필자는 회사에서 MWAA로 airflow를 구축 한 뒤 활용중이다.
배경
MWAA 도입 이유
k8s로 직접 설치하는것 대비 MWAA를 쓰는 목적은 제한된 엔지니어 인력 내에서 운영을 최대한 위탁하기 위함이다.
파이썬 클라우드 프레임워크 도입 이유
동 시점에 클라우드에서 boto3 등등의 패키지를 그냥 이용하자니 자사에 커스터마이즈 되어 사용해야 되는 코드가 꽤 필요해져 ventus
라는 이름으로 파이썬 프레임워크를 만들게 되었다.
이슈사항
본격적으로 airflow를 활용하려는 시점에 DAG개발에도 ventus
를 가져다 쓰는게 효율적이어서 MWAA에 파이썬 커스텀 패키지 설치가 가능한지 살펴보았다.
시행착오 끝에 알아낸 방법을 정리해둔다.
방법요약
MWAA에 커스텀 파이썬 패키지를 설치하는 방법을 요약하면 아래와 같다.
- plugins.zip 내에 wheel을 포함한다.
- requirements에는 plugins 경로로 패키지를 지정한다.
- aws-mwaa-local-runner를 통해 로컬에서 먼저 검증해본다.
- 이상 없으면 MWAA에 적용한다.
로컬 환경에서 설치하기
- 먼저 커스텀 설치할 wheel을 준비해둔다.
/Users/lks21c/repo/aws-mwaa-local-runner.original
git을 clone한다.- 이후 plugins 디렉토리 아래에 wheel을 위치시킨다.
dags/requirements.txt
파일에 아래와 같이 플러그인 파일을 기재한다.
해당 파일이 로컬 MWAA가 로드되면서 인식하는 requirements.txt로써 알아서 설치까지 해준다.
plugins/ventus-0.1.0-py3-none-any.whl
- 로컬 MWAA 기동 후 패키지가 정상 로드 되는지 테스트 해본다.
MWAA에서 설치하기
- requirements.txt는 위와 동일하게 작성 후 S3에 적당한 위치에 업로드한다.
- wheel을 zip으로 압축하여
plugins.zip
으로 만든 뒤 마찬가지로 S3에 적당한 위치에 업로드한다. - MWAA에 아래 그림과 같이 업로드한 S3를 지정해준다.
- 이후 환경을 저장하면 airflow가 업데이트 된다.
- 기다리면 available로 상태가 바뀐다.
AWS MWAA 검증하기
airflow가 정상적으로 업데이트 된 뒤 테스트 dag를 만들어 설치한 패키지를 import 해본다.
다행히 MWAA가 커스텀 패키지를 인식하여 DAG에러가 발생하지 않는다.
설치한 패키지 버전이 정상적으로 출력되는 것을 확인 할 수 있다.
운영 시 유의할점
커스텀 패키지가 업데이트 될 일이 있으면 plugins.zip을 다시 압축하여 S3에 업로드 한 뒤 MWAA 환경설정을 다시 save
를 눌러 airflow 패키지 재반영을 해주어야 한다.
이부분은 devops 자동화를 고려해볼만 할 것 같다.
Reference
- https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags-dependencies.html
- https://stackoverflow.com/questions/71834540/install-custom-package-wheel-in-mwaa