1. 배경 지식

Airflow는 꽤 빠르게 Minor 버전이 올라간다.

AWS에서 제공하는 MWAA도 약 4개월 주기로 최신 버전을 제공해준다.

최신 버전을 가능한 빨리 따라잡는 이유는 현재 버전에서의 문제가 최신 버전에서 해결되었을 가능성이 높기 때문이다.

AWS에서 가급적 안정된 버전을 서비스하기 때문에 최신 버전에서 새롭게 발생하는 버그 등에 대해 신경쓰지 않아도 된다.

그리고 버전 업그레이드를 계속 미루다 보면, 기술 부채로 쌓일 수 있기 때문에 주기적으로 관리해야 한다.

그래서 최대한 빠르게 MWAA의 Airflow 버전을 올리고자 한다.

2. 요구사항

MWAA에서 Airflow 2.8.2 버전을 지원함에 따라 Airflow 버전을 2.7.3에서 2.8.2로 업그레이드한다.

3. 해결 과정

  1. local 환경에서 Airflow 2.8.2 버전의 MWAA local runner로 requirements 호환성 테스트를 한다.
    1. requirements가 잘 적용되었는지 확인하기 위해 MWAA를 재실행해주게 되면, 매 재실행마다 약 30분 정도의 시간이 낭비가 된다. 그래서 간편하게 MWAA local runner로 현재 사용하고 있는 패키지 버전과 최신 Airflow의 패키지 버전이 호환되는지 확인한다.
  2. local 환경의 Airflow Library를 2.8.2 버전으로 업그레이드하고 최신 버전의 Airflow에서 변경된 Operator나 코드들이 있는지 확인한다.
    1. airflow 공식 문서의 release note에서도 확인할 수 있지만, 더블체크 한다.
  3. staging 환경에서 MWAA의 Airflow 버전을 업그레이드하면서 소요되는 시간 및 새로 필요한 권한이 있는지 확인한다.
    1. iam 뭐 필요했지?
    2. 최신 MWAA는 기존 환경에서 Airflow 버전만 업그레이드하는 기능을 제공해준다. (약 1시간 30분 정도 소요된다.)
  4. production 환경의 MWAA를 업그레이드한다.
    1. 우리는 한시간 주기 배치 작업이 많이 있어서, 대부분의 DAG가 종료되는 15분에 MWAA 버전을 업그레이드했다.

4. 결론

A. MWAA 버전을 올리는 IAM User에게 IAM:PassRole Action을 추가해야 한다.

2024년 1월 16일부터 AWS MWAA는 ExecutionRoLearn 파라미터에 대한 IAM:PassRole이 명시적으로 부여되지 않은 CreateEnvironment 및 UpdateEnvironment API 호출을 거부합니다.

{
   “Effect”:"Allow",
   “Action”:[
        “iam:PassRole”
   ],
   “Resource”:"*",
   “Condition”:{
        “StringLike”:{
            “iam:PassedToService”:"airflow.amazonaws.com"
        }
   }
}