DOCKER로 AIRFLOW 로컬 테스트환경 셋팅하기

Yeolsim's logs·2024년 8월 19일

별도의 배치 테스트 환경이 없어서 매번 MWAA prod에 바로 dag을 배포하는 형태로 진행하다가, 배치 사이즈와 서비스 규모가 커짐에 따라 더이상은 운영에 바로 배포하는것은 무리라고 판단되었다.

운영 배포 전 테스트 환경에서 배치 스크립트를 돌려보면 좀 더 안전하게 운영될 수 있을 것 같아 내 로컬에서 docker로 airflow 서버를 올리는 과정을 진행했다.

진행 순서

1.docker설치

  • airflow 도커 이미지를 받아서 컨테이너로 실행하였다.
  • 모든 환경에서 동일한 이미지로 airflow 환경을 띄울 수 있고, 우리 서비스에 필요한 패키지와 의존성을 requirements.txt 파일 하나로 설치과정을 단순화할 수 있고, 수정사항에 대한 배포가 쉽기 때문에

2. airflow 로컬 환경 디렉토리 생성

3.Dockerfile 작성

  • prod환경과 동일한 airflow버전과 패키지 설치 파일들로 지정해주었다.

4.docker-compose.yml 파일 작성

docker-compose는 여러개의 컨테이너를 한번에 정의하고 실행시킬수 있도록 하는 도구이다.

airflow 환경을 실행시키려면 아래의 기능을 하는 컨테이너가 전부 실행되어야하기 때문에 docker-compose로 정의한다.

  • PostgreSQL: Airflow의 메타데이터를 저장하는 데이터베이스.
  • Redis: Airflow에서 CeleryExecutor를 사용할 때 작업 대기열로 사용.
  • airflow-init: 초기화 컨테이너로, 데이터베이스를 초기화하고 기본 사용자 계정을 생성.(한번 실행된 후 종료됨)
  • airflow-webserver: Airflow 웹 인터페이스를 제공.
  • airflow-scheduler: DAG를 스케줄링하여 작업을 실행.
  • 볼륨: PostgreSQL 데이터베이스 데이터를 영구적으로 저장하기 위한 볼륨.

    로컬 환경에서 Airflow의 전체 스택을 손쉽게 설정하고 관리할 수 있다.

5. airfow db초기화 및 실행

docker-compose up airflow-init
docker-compose up --build

6.dag 소스코드 git clone

cd C:\Users\JURO2023-JURO\Desktop\risk_weather\airflow_dev\dags
git pull origin main

7. airflow 변수관리

  • 코드 수정 없이 동일한 코드로 테스트 진행하려면 MWAA 환경과 로컬 환경에서의 변수관리를 일치시켜줘야함

트러블 슈팅

db연결 안됨

현재 개발DB와 운영DB 모두 AWS 의 private VPC 내부에 위치하기 때문에 로컬에서 해당 DB에 접근하고자 하면

bastion 서버를 통해 터널링해서 접근하고 있는데, docker-compose.yml에 터널링 커맨드를 추가하고 db연결 task를 실행시켜도 계속 connection refused 에러가 발생

해결방법

→ docker-compose.yml파일에서 커맨드로 커널링 후 코드레벨에서 host를 “localhost”가 아닌 “host.docker.internal”로 연결

0개의 댓글