본문 바로가기
🌿 Data Engineering/Data PipeLine (Airflow)

[로컬 환경에서] AWS MWAA (ariflow) 구축하기

by 카프리썬_ 2024. 1. 7.
728x90
728x90

 

 

 

 

airflow DAG를 테스트해보는 환경이 없었다. 

물론 DAG 코드가 간단해서 다행이지만 돌려보지도 않고 바로 staging에 반영을 해야하는 상황이였다. 

심지어 나는 staging에 바로 머지할 권한도 없어서 매번 PR을 드린다.

그러다 단순한 오타나 따옴표 같은 에러라도 나는 날이면.....하하....^^;; 

 

그래서 로컬에서 DAG 코드를 테스트해 볼 환경이 필요했다. 

우리는 단순 ariflow가 아닌 aws의 mwaa를 사용한다. (오히려 좋아) 

이와 같은 개발환경을 로컬에서 구축하고 DAG 코드를 테스트해 본 경험을 작성해보려고 한다. 

 

사실 굉장히 간단한데 왜 지금까지 안해봤는지 모르겠다  ^0^

 


 

들어가기에 앞서 우리 서비스의 AWS mwaa는 이렇게 staging과 prod만 있다.  

 

staging이 곧 dev환경이라곤 하지만..  나에겐 자유로운 개발환경이 필요하다.

 

 

AWS-MWAA-local-runner 오픈소스

AWS에서 mwaa 환경을 로컬로 실행할수 있도록 오픈소스를 제공해주고 있다.

https://github.com/aws/aws-mwaa-local-runner

 

GitHub - aws/aws-mwaa-local-runner: This repository provides a command line interface (CLI) utility that replicates an Amazon Ma

This repository provides a command line interface (CLI) utility that replicates an Amazon Managed Workflows for Apache Airflow (MWAA) environment locally. - GitHub - aws/aws-mwaa-local-runner: This...

github.com

 

 

git clone

브랜치가 곧 mwaa의 버전인걸로 보인다. 

그래서 원하는 버전으로 브랜치 checkout 후에 git clone을 한다. 

```bash
$ git clone https://github.com/aws/aws-mwaa-local-runner.git
$ cd aws-mwaa-local-runner
```

 

도커 이미지를 위한 코드변경

클론 받은 프로젝트 안에서 몇가지 코드을 수정할 수 있다. 

 

DAG파일 작성 

dags 폴더에는 테스트하고자하는 DAG 파일을 넣는다.

아마 프로젝트를 클론 받으면 기본 DAG코드가 있을 것이다. 

 

requirements 추가 

dags/requirements.txt 파일에는 필요한 dependecy를 작성한다. 

--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.2/constraints-3.7.txt"

사실 이렇게 해당 주소로 가면 관련 패키지들이 이미 종속되어 있는걸 확인할 수 있다.

하지만 아래처럼 추가로 별도의 패키지와 버전으로 수정할수도 있다.

--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.2/constraints-3.7.txt"
apache-airflow-providers-amazon
apache-airflow-providers-ssh
apache-airflow[cncf.kubernetes]
apache-airflow[slack]

 

requirements 테스트

참고로 local mwaa를  띄워보기 전에 requirements를 미리 테스트해볼 수 있다.

./mwaa-local-env test-requirements

 

 

볼륨 및 환경변수설정

docker/docker-compse-local.yml  파일에 마운트할 볼륨 및 환경변수를 설정한다. 

예를 들어 AIRFLOW_VAR_ENV 설정도 할 수있고,

AWS 서비스에 접근하기 위한 credentials로 직접 넣을수있다. 

 

그리고 volumes 부분에서는 현재 로컬경로와 도커 컨테이너 경로를 연결하기 위한 설정을 할 수있다.

예를 들어 "${PWD}/dags:/usr/local/airflow/dags" 마운트하는 것처럼 

컨테이너의 dags에는 로컬경로의 dag폴더에 넣은 파일이 위치하기 떄문에 직접 로컬에서 파일을 수정하고 변경할수 있다.

 

참고로, 나는 AWS에 접근하기 위한 access key 와 secret key를 직접 박아넣었다..

사실 이것보단 로컬에 aws credentials의 위치를 직접 볼륨 마운트하는게 더 나을것 같다! 

 

도커 이미지 생성

이렇게 구성환경들을 수정한 코드들로 이제 loca-mwaa를 만들 준비가 되었다.

도커 파일을 빌드해서 이미지를 만든다.

 

 

컨테이너 실행 

이렇게 만들어진 이미지를 기반으로 컨테이너를 실행한다. 

./mwaa-local-env start

 

local mwaa 접속하기

이렇게 실행된 컨테이너에 접속하면 local mwaa가 올라간걸 확인할 수 있다.

이때 username은 admin, password는 test로 접속할 수있다. 

 

 

작성일 기준 2.7.2 버전까지 나온것 같은데 다른버전도 로컬에서 띄워서 미리 볼수도 있다. 


 

이제 이렇게 로컬에서 mwaa를 띄워볼수 있으니

dag코드를 이것저것 테스트해볼수도 있겠다! 

airflow 공부를 좀더 해봐야겠다! 

728x90
반응형