# 이렇게 설정해두면 웹 UI에는 안 보임. 하지만 웹 UI에서 세팅하는 거랑 똑같은 효과
environment:
AIRFLOW_VAR_DATA_DIR: ~ # AIRFLOW_VAR로 시작하면 Airflow의 환경변수
AIRFLOW_CONN_BLAH_BLAH: ~ # AIRFLOW_CONN으로 시작하면 Airflow 웹 UI에 세팅된 connection이랑 똑같음, 그 뒤의 string이 connection의 이름이 됨.
dags_folder
가 가리키는 폴더를 서브폴더 포함 모두 스캔해서 DAG 모듈이 포함된 모든 파이썬 스크립트를 실행함 → 가끔 사고로 이어짐.airflowignore
는 Airflow가 의도적으로 무시해야 하는 디렉토리/파일 지정.airflowignore
안의 내용이 아래와 같다면project_a
→ project_a_dag_1.py
, TESTING_project_a.py
, project_a/dag_1.py
이와 같은 파일 무시tenant_[\d]
→ tenant_1.py
이와 같은 파일 무시[api]
auth_backend = airflow.api.auth.backend.basic_auth
docker-compose.yaml
AIRFLOW__API__AUTH_BACKENDS: 'airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session
여기에서 처음 언더바 2개 다음의 글자(API)는 section을 의미, 그 다음 언더바 2개 다음 글자(AUTH_BACKENDS)는 section 밑의 key를 의미.
is_active
와 is_paused
의미
curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/dags
이와 같이 GET 요청을 했을 때 dags에 관한 정보들이 뜸. 여기서 is_active
는 dags folder에 존재하는지 여부이고, is_paused
는 현재 멈춰 있는지 (활성화된 dag인지 아닌지) 확인할 수 있는 값.
환경변수로 지정된 건 return하지 않음. 예를 들어 DATA_DIR
이라는 환경 변수 존재 확인하려면 $ docker exec -it {컨테이너_ID} airflow variables get DATA_DIR
-> 결과 출력됨.
bash_command
(str), env
(dict[str, str])는 Jinja Template 지원. 여기 참고해서, 파라미터 설명에 (templated)라고 되어있으면 Jinja Template 지원한다는 의미$ docker exec -it {CONTAINER_ID} sh
$ psql -h postgres
$ \dt
터미널에서 airflow dags test로 하면 DAG 실행이 잘 되지만, localhost:8080
에 들어가서 dag를 trigger하면 실행이 안되는 문제가 발생했다.
airflow-worker
에서는 PermissionError: [Errno 1] Operation not permitted: ~~~
가 떴다.
airflow-scheduler
에는 Executor reports task instance <TaskInstance: {DAG_ID}.extract scheduled__2023-06-21T00:00:00+00:00 [queued]> finished (failed) although the task says its queued. (Info: None) Was the task killed externally?
가 떴다.
그것도 모든 DAG가... 나한테 왜 이래. airflow-worker
에서 알려준 경로에 log 파일이 존재해야 하는데 쓰기 권한이 있는데도 존재하지도 않았다. DAG는 trigger한 이후로 계속 running 상태 또는 다 fail.. 그래서 나름대로 해결해보려고 삽질을 일주일 내내 했다. 😫
원인?
일단 예상되는 원인은 airflow 2.5.1 자체에 버그가 있다는 것. 구글링 하다가, 간신히 나랑 똑같은 오류가 발생했다는 글을 찾았다. 나는 airflow 2.5.1 버전을 docker-compose해서 쓰고 있었는데 글쓴이의 버전도 나랑 똑같다. bug를 고쳐서 커밋하셨길래, 봤더니 try-except 구문으로 처리된 코드가 추가되어 있었다.
그래서 당장 내 환경에서 해당 부분을 확인해봤다. 경로는 docker container에 접속해서 여기로 이동했다. → /home/airflow/.local/lib/python3.7/site-packages/airflow/utils/log/file_task_handler.py
음.. 나에겐 그런 부분이 존재하지 않아 오류가 발생했던 것 같다. 물론 나도 확실히 모름 ㅎ
근데 여기서 내가 고치는 게 말도 안될 것 같아서 그냥 airflow 2.6.1 버전 docker-compose.yaml
파일 새로 받고 다시 했다. 2.6.1 버전 확인해보니 해당 부분이 try-except로 처리되어 있었다. DAG 실행도 다시 잘 됐다. 👍
pip3로 install하면 dbt 버전이 1.0.0 보다 한참 낮은 버전으로 설치되는 문제가 발생했다. 얘는 seeds 폴더를 못 알아먹는다,, 실습해야 하는데 마음에 안 든다. dbt가 1.0.0 버전 이후로는 pip3 install upgrade
조차 지원을 안한다고 한다. 그럼 어떻게 해결했느냐?
$ tar -xvf dbt-core-1.5.2.tar.gz
$ cd dbt-core-1.5.2
$ python setup.py install
$ dbt --version
$ pip3 install dbt-redshift
그러면 core 버전에 맞게 plugin도 높은 버전으로 깔린다. 아래처럼!