<aside> 💡 현재 airflow1.10.12 버전을 사용하고 있으며 이를 airflow2로 버전업을 시켜 추우헤 kubernetes executor로의 이전과 버전수정의 어려움을 사저에 차단하기 위해서 실행하게 되었다.

</aside>

진행 절차

절저하게 공식문서를 바탕으로 진행을 하였다. 공식문서에 따르면 버전을 업그레이드 하기위한 과정을 다음과 같다.

  1. airflow 1.10.15로 버전 업그레이드를 한다.

    버전 업그레이드를 위한 과도기적인 패키지의 성격을 띈다고 한다.

  2. apache-airflow-upgrade-check 패키지를 설치한다.

    해당 패키지는 업그레이드를 위한 체커 패키지를 설치하는 과정이다. 설치가 완료되었다면 다음 명령어를 수행하자

    airflow upgrade_check
    

    markupsafe의 패키지를 로드하지 못해서 발생하는 에러가 생길 수 있다.

    Untitled

    이는 해당 패키지의 버전이 올라가면서 특정 패키지에서 해당 모듈을 불러오지 못해서 발생하는 문제였다. → 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
    
  3. DB 업데이트

    개발 서버를 업데이트 하면서 DB에 대한 커넥션 문제가 발생하였다. Airflow에서 권장하는 사항은 백업 후에 airflow db upgrade를 통해서 DB를 업데이틑 하는 것이다.

    → 로컬에서는 새로운 컨테이너를 쌓으면 되지만 실제 배포상황에서는 DB 인스턴스가 이미 존재하기 때문에 이를 업데이트 해야 한다.

Error 처리과정

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 파일에 위의 코드를 추가하도록 하자

옵션/커맨드 에러

버전이 업그레이드 되면서 몇가지 커맨드가 바뀌었다. 해당 내용은 로그를 확인하여 문제 상황을 인지하고 공식문서를 참고하였다.