비밀번호

커뮤니티2

  • 맑음속초13.6맑음북춘천1.6맑음철원1.1맑음동두천3.4맑음파주2.4맑음대관령4.0맑음춘천1.9황사백령도10.9황사북강릉14.0맑음강릉11.5맑음동해13.3황사서울7.2황사인천7.9맑음원주3.9황사울릉도11.0맑음수원4.9맑음영월1.4맑음충주2.2맑음서산1.1맑음울진9.9황사청주5.1황사대전3.9맑음추풍령1.7황사안동4.7맑음상주5.0황사포항8.7맑음군산3.2황사대구8.1황사전주3.0황사울산8.3맑음창원11.4황사광주5.8맑음부산11.1맑음통영9.0황사목포7.1황사여수8.4황사흑산도6.7구름많음완도6.6구름많음고창1.8구름많음순천6.0황사홍성3.4맑음서청주1.8황사제주9.0구름많음고산9.8구름많음성산9.1흐림서귀포13.4구름많음진주7.8맑음강화6.4맑음양평3.6맑음이천3.6구름많음인제2.7맑음홍천2.9맑음태백4.7맑음정선군1.6맑음제천0.2맑음보은0.8맑음천안1.0맑음보령1.9맑음부여1.2맑음금산1.0맑음세종1.9구름많음부안3.0구름많음임실0.2구름많음정읍2.3구름많음남원1.5구름많음장수-0.6구름많음고창군2.5구름많음영광군3.5맑음김해시10.3구름많음순창군1.9구름많음북창원11.2구름많음양산시12.0맑음보성군6.2구름많음강진군6.0구름많음장흥4.3구름많음해남5.8맑음고흥3.1구름많음의령군3.4구름많음함양군1.0맑음광양시5.6구름많음진도군7.9맑음봉화2.2맑음영주4.0맑음문경3.3맑음청송군2.2맑음영덕7.7맑음의성2.3맑음구미5.0맑음영천6.6구름많음경주시8.5구름많음거창1.7구름많음합천4.1구름많음밀양10.5구름많음산청3.2맑음거제10.9맑음남해8.1구름많음북부산12.2
  • 2026.04.21(화)

데이터 엔지니어링데이터 엔지니어링

Docker 컨테이너로 실행하는 Airflow의 무중단 배포(Blue/green deployments)

Airflow를 도커 컨테이너로 실행할 때 무중단 배포방식에 대해서 소개합니다.

현재 Airflow 운영 환경은 webserver와 scheduler를 각각 컨테이너로 EC2에서 실행하며 EC2에는 nginx가 실행되어 Airflow 웹서버로 proxy pass합니다.

AwsEcsExecutor를 사용하여 Fargate 위에서 worker가 실행됩니다.

배포는 Gitlab CI로 자동 배포합니다.

 

Gitlab CI를 통한 배포에서는 아래 두 단계를 거칩니다.

1. dag, 소스코드, 라이브러리를 포함하여 이미지를 빌드한 후 ECR에 푸시하는 단계

2. EC2에 SSH로 접속하여 ECR에서 Airflow 이미지를 받고 무중단으로 컨테이너를 실행하는 단계

 

1번 단계에서는 프로젝트의 최신 커밋에서 미리 정의된 Dockerfile을 통해 이미지 빌드를 진행합니다.

이미지 빌드 과정에서 환경변수를 통해 Airflow의 설정과 종속성 패키지 설치, DAG 및 소스 코드를 가져옵니다.

 

 

2단계에서는 EC2에 SSH 접속하여 미리 정의된 쉘스크립트를 실행하여 무중단 배포를 진행합니다.

 

 

아래는 블루그린 배포를 실행하는 쉘스크립트 소스입니다.

#!/bin/bash


배포를 위해 blue, green 각각의 docker-compose 파일을 미리 정의해둡니다.

(ex: docker-compose.blue.yml, docker-compose.green.yml)

 

스크립트 실행 과정입니다.

- 이미지를 가져오기 전에 system prune을 통해 리소스를 정리합니다.

- ECR에 인증 후(사전에 EC2에 IAM역할 설정) 이미지를 가져옵니다.

- 현재 실행중인 그룹이 blue이면 green 그룹을, green이면 blue 그룹을 실행합니다.

- 웹서버의 포트를 blue, green에 따라 다르게 정의합니다(blue: 8080, green: 8081)

- 새 그룹의 컨테이너를 실행합니다.

- 새로 실행한 컨테이너 그룹이 정상 작동할때까지 health check를 진행합니다(scheduler 컨테이너의 상태가 healthy일 때 까지)

- 그룹 컨테이너 정상 작동이 확인되었다면 nginx -s reload 명령을 통해 웹서버 포트 변경을 반영합니다.

- 기존 컨테이너를 종료합니다.

 

이를 통해 Airflow의 scheduler와 webserver를 중단 없이 배포할 수 있습니다.

위 방식은 한 EC2 인스턴스 내에서 nginx로 proxy pass를 조정하였지만 로드밸런서와 여러 대의 EC2 인스턴스로도 진행할 수 있습니다.

전체댓글0

검색결과는 총 26건 입니다.    글쓰기
1 2