현상
최근 CeleryExecutor를 사용하는 Airflow 버전을 2.5.1에서 2.8.2로 업그레이드를 진행하면서 영향도를 확인하고 있는데, Flower의 업그레이드된 버전에 변경점이 있었는지(확인해 보니 1.2에서 2.0으로 업그레이드되어있었다) Flower를 통한 worker 조작 시 다음과 같은 에러가 발생하면서 설정 변경 등이 적용되지 않았다.
문제를 해결해보자.
원인
Flower 1.0과 다르게 2.0부터는 보안 상의 이유로 인증, 즉 로그인이 활성화되지 않은 경우에는 기본적으로 API의 사용이 비활성화된다. 따라서 가급적이면 로그인 인증 설정을 활성화하거나 별도의 설정을 통해 로그인 인증 없이 API 사용을 허용해야 한다.
해결
이 글에서는 로그인 인증 없이도 API를 사용할 수 있도록 허용하는 방식으로 문제를 해결한다.
Airflow와 함께 사용하고 있어서 Airflow 설정으로 조정할 수 있는지 확인해 봤는데, 관련 설정부가 없는 것 같다.
1. 환경 변수 FLOWER_UNAUTHENTICATED_API 설정
flower가 동작하는 서버에서 수행한다.
export FLOWER_UNAUTHENTICATED_API="true"
2. 서비스 재시작
Flower를 재시작한다. 이 글에서는 airflow webserver, scheduler, flower를 전부 재시작하긴 했다.
3. 적용 확인
Flower Web UI로 worker 설정 조작 등이 가능한지 확인해 본다. 이상이 없으면 이제 정상적으로 작업을 수행할 수 있다.
+ 참고로 airflow celery flower 시작 시 로그인 인증은 Flower 시작 시에 다음과 같이 설정할 수 있다.
airflow celery flower --basic-auth=user1:password1,user2:password2
참고 문서
https://flower.readthedocs.io/en/latest/api.html
https://stackoverflow.com/questions/77550121/celery-flower-unauthenticated-api-not-working