<aside> 💡 현재 airflow1.10.12 버전을 사용하고 있으며 이를 airflow2로 버전업을 시켜 추우헤 kubernetes executor로의 이전과 버전수정의 어려움을 사저에 차단하기 위해서 실행하게 되었다.
</aside>
절저하게 공식문서를 바탕으로 진행을 하였다. 공식문서에 따르면 버전을 업그레이드 하기위한 과정을 다음과 같다.
airflow 1.10.15로 버전 업그레이드를 한다.
버전 업그레이드를 위한 과도기적인 패키지의 성격을 띈다고 한다.
apache-airflow-upgrade-check
패키지를 설치한다.
해당 패키지는 업그레이드를 위한 체커 패키지를 설치하는 과정이다. 설치가 완료되었다면 다음 명령어를 수행하자
airflow upgrade_check
markupsafe의 패키지를 로드하지 못해서 발생하는 에러가 생길 수 있다.
이는 해당 패키지의 버전이 올라가면서 특정 패키지에서 해당 모듈을 불러오지 못해서 발생하는 문제였다. → pip install MarkupSafe==2.0.1
다음과 같이 어떤 부분에서 오류가 발생할 지를 airflow.cfg
파일을 로드하여 읽게된다.
체크리스트에서 어떤 부분에서 오류가 발생하였는 지를 알 수 있다.
추가적으로 문제를 해결하기 위한 가이드라인이 아래처럼 제시되어 있다.
Problems:
1. Please install `apache-airflow-backport-providers-postgres`
2. Please install `apache-airflow-backport-providers-slack`
3. Using `airflow.operators.postgres_operator.PostgresOperator` should be replaced by `airflow.providers.postgres.operators.postgres.PostgresOperator`. Affected file: /usr/local/airflow/dags/update_keyword2pik.py
4. Using `airflow.operators.postgres_operator.PostgresOperator` should be replaced by `airflow.providers.postgres.operators.postgres.PostgresOperator`. Affected file: /usr/local/airflow/dags/update_keyword2link.py
5. Using `airflow.operators.postgres_operator.PostgresOperator` should be replaced by `airflow.providers.postgres.operators.postgres.PostgresOperator`. Affected file: /usr/local/airflow/dags/set_master_pik.py
6. Using `airflow.operators.postgres_operator.PostgresOperator` should be replaced by `airflow.providers.postgres.operators.postgres.PostgresOperator`. Affected file: /usr/local/airflow/dags/link_dump.py
7. Using `airflow.operators.slack_operator.SlackAPIPostOperator` should be replaced by `airflow.providers.slack.operators.slack.SlackAPIPostOperator`. Affected file: /usr/local/airflow/dags/utils/alert.py
8. Using `airflow.operators.slack_operator.SlackAPIPostOperator` should be replaced by `airflow.providers.slack.operators.slack.SlackAPIPostOperator`. Affected file: /usr/local/airflow/dags/operators/SlackStartEndOperator.py
DB 업데이트
개발 서버를 업데이트 하면서 DB에 대한 커넥션 문제가 발생하였다. Airflow에서 권장하는 사항은 백업 후에 airflow db upgrade
를 통해서 DB를 업데이틑 하는 것이다.
→ 로컬에서는 새로운 컨테이너를 쌓으면 되지만 실제 배포상황에서는 DB 인스턴스가 이미 존재하기 때문에 이를 업데이트 해야 한다.
docker 환경을 기준으로 쓴 글입니다. 기본적으로 docker 환경에서는 로컬 환경보다 정리된 환경에서 변인들을 통제하여 실험할 수 있기 때문에 문제를 해결하는데 훨씬 수월하다.
일단 위의 라이브러리 경로 문제를 해결하고
pip install "apache-airflow[s3,crypto,celery,postgres,slack,ssh]==${AIRFLOW_VERSION}"
위의 명령어를 통해서 업그레이드 패키지를 설치하자. 새롭게 설치한 환경에서
Airflow2.0으로 올라가면서 secret key에 대한 보안이 강화되었다. 기존의 버전(1.10)에서는 문자열을 넣어도 되었지만 2.0 이후부터는 openssl을 이용한 인증키 생성을 하도록 바뀌었다.
secret_key = 8f65a157c5ca08978883fe1dv97be6a49269a3c64fe0bbb5490fc53e0546
airflow.cfg
파일에 위의 코드를 추가하도록 하자
버전이 업그레이드 되면서 몇가지 커맨드가 바뀌었다. 해당 내용은 로그를 확인하여 문제 상황을 인지하고 공식문서를 참고하였다.