개요
업무 환경에서 Airflow 2.5.1 버전을 사용하고 있었는데 보안적인 문제로 인해 2.8.2 버전으로 업그레이드를 진행하고 있다 그런데 막상 테스트로 업그레이드를 해보니 이슈가 조금 있어서…… 다시 Airflow 2.5.1 버전으로 다운그레이드하고 싶다.
2023.03.28-[Airflow] 버전 업그레이드에서는 업그레이드 방법을 정리해 두었으니, 이번 글에서는 다운그레이드 진행 방법을 적어둔다.
방법
1. Airflow 서비스 중지
작업을 수행하기 전에 Airflow 서비스를 전부 중지한다. Webserver, Scheduler와 CeleryExecutor를 사용하고 있다면 Flower와 Celery도 중지한다.
추가로 필요하다면 데이터베이스나 설정 파일도 백업해 두도록 한다.
2. Airflow Meta DB 다운그레이드
업그레이드할 때와는 달리 다운그레이드 시에는 Airflow Meta DB를 먼저 다운그레이드하고 패키지 설치를 수행해야 한다. 달리 말해, DB 다운그레이드 수행 시점에는 여전히 Airflow 업그레이드 버전이 설치된 상태여야 한다.
airflow db downgrade
# -r, --to-revision <target airflow db revision> : 다운그레이드할 airflow db 리비전 지정
# -n, --to-version <target airflow version> : 다운그레이드 airflow 버전 지정
-- 예시
airflow db downgrade -r 290244fb8b83
airflow db downgrade --to-revision 290244fb8b83
airflow db downgrade -n 2.5.0
airflow db downgrade --to-version 2.5.0
다운그레이드할 때는 어떤 버전으로 다운그레이드할 지 지정해야 한다. 타깃 버전은 -to-version 옵션으로 Airflow의 버전을 지정하거나, --to-revision 옵션으로 Airflow Meta DB의 revision을 지정한다. 값은 https://airflow.apache.org/docs/apache-airflow/stable/migrations-ref.html를 참고하고, 두 옵션 중 하나만 지정하면 된다.
🤔 왜 패키지 설치를 선행하면 안 될까?
Airflow 버전 변경에는 데이터베이스 마이그레이션이 포함되어 있을 수 있다. 때문에 Airflow 설치나 업그레이드 시에는 패키지 설치/업그레이드 수행 후 db init/upgrade 등의 작업을 수행하게 된다.
반면 다운그레이드를 위해 패키지 설치를 먼저 수행하는 경우, 데이터베이스 마이그레이션을 시도하는 시점에 다운그레이드한 버전의 Airflow는 보다 최신 Airflow 버전의 데이터베이스에 대한 버전 정보를 가지고 있지 않다. 따라서 마이그레이션을 수행할 수 없게 된다.
참고로 패키지를 먼저 다운그레이드하고 데이터베이스 다운그레이드를 수행하면 Can't locate revision identified by <revision> 에러가 발생한다.
3. Airflow Meta DB revision 확인
Meta DB revision은 Meta DB의 alembic_version 테이블의 값을 조회하여 확인할 수 있다.
SELECT *
FROM airflow.alembic_version;
4. 패키지 다운그레이드
데이터베이스 다운그레이드에 이상이 없으면 아래와 같은 명령어로 다운그레이드한 패키지를 설치한다.
pip install apache-airflow[celery,amazon,slack,docker]==2.5.1 pyOpenSSL==22.1.0 --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.5.1/constraints-3.10.txt"
5. Airflow 서비스 확인
Airflow 서비스를 재시작하여 다운그레이드한 버전이 정상적으로 동작하는지 확인한다.
참고 문서
https://airflow.apache.org/docs/apache-airflow/stable/howto/usage-cli.html#downgrading-airflow
https://airflow.apache.org/docs/apache-airflow/stable/migrations-ref.html