개요

필자는 회사에서 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