airflow.cfg 중요 포인트
1.
Airflow의 configuration이 들어가있는 파일은 airflow.cfg입니다.
2.
DAGs 폴더는 어디에 지정되는가?
•
기본적으로는 Airflow가 설치된 디렉토리 밑의 dags 폴더가 되며 dags_folder 키에 저장됨 → dags 폴더에서 코딩시 작성한다면 주의할 점
◦
Airflow는 dags 폴더를 주기적으로 스캔함 ⇒ 키 : dags_folder
## airflow.cfg
[core]
dags_folder = /var/lib/airflow/dags
Python
복사
3.
DAGs 폴더에 새로운 Dag를 만들면 언제 실제로 Airflow 시스템에서 이를 알게 되나?
이 스캔 주기를 결정해주는 키의 이름이 무엇인가?
•
⇒ airflow.cfg 파일 내부의 dag_dir_list_interval
◦
새 파일을 스캔하는 데 필요한 시간 (초)입니다. 기본값은 5분입니다.
dag_dir_list_interval = 300
▪
스캔 시, DAG 모듈이 들어있는 모든 파일들의 메인 함수가 실행이 됨
•
이유 : 그 파일이 DAG인지 아닌지 확인 및 파악하기 위해
▪
이 경우 본의 아니게 개발 중인 테스트 코드도 실행될 수 있음
from airflow import DAG
…
cur.execute("DELETE FROM …."
Python
복사
4.
이 파일에서 Airflow를 API 형태로 외부에서 조작하고 싶다면 어느 섹션을 변경해야하는가?
•
Airflow를 API 형태로 외부에서 조작하려면 api 섹션을 변경해야 합니다. airflow.cfg 파일에서 [api] 섹션을 찾아서 해당 섹션의 설정을 수정해야 합니다. 일반적으로 다음과 같이 변경해줍니다.
auth_backend = airflow.api.auth.backend.basic_auth
# basic_auth : id와 pw를 가지고 인증을 하는 방식
Python
복사
5.
Variable에서 변수의 값이 encrypted가 되려면 변수의 이름에 어떤 단어들이 들어가야 하는데 이 단어들은 무엇일까? :)
•
값이 암호화되기를 원하는 경우 이름에 "access" 또는 "secret"을 붙여 사용 가능합니다.
◦
password, secret, passwd, authorization, api_key, apikey, access_token
•
예시 : secret_csv_url
6.
이 환경 설정 파일이 수정되었다면 이를 실제로 반영하기 위해서 해야 하는 일은?
•
airflow.cfg 파일이 수정되었다면 변경 사항을 실제로 반영하기 위해 Airflow 웹 서버를 다시 시작해야 합니다. 변경된 설정을 적용하기 위해 Airflow 서비스를 재시작하거나, Docker 컨테이너에서 실행 중인 경우 컨테이너를 다시 시작해야 합니다.
a. sudo systemctl restart airflow-webserver
b. sudo systemctl restart airflow-scheduler
Python
복사
•
참고
◦
airflow db init의 경우, 메타 데이터베이스를 초기화하는 역활만 수행. 변경된 부분을 반영해주지는 않는다. 백엔드(메타 DB)가 바뀌었을 경우, 사용.
7.
Metadata DB의 내용을 암호화하는데 사용되는 키는 무엇인가?
•
Metadata DB의 내용을 암호화하는 데 사용되는 키는 fernet_key라고 합니다. airflow.cfg 파일에서 [core] 섹션에서 fernet_key 값을 설정하면 됩니다. 이 키는 암호화된 데이터를 복호화하고 암호화하는 데 사용됩니다. 기본적으로는 랜덤한 문자열로 설정되어 있습니다.
fernet_key = your-fernet-key
Python
복사
실제 운영 환경에서는 안전한 방식으로 fernet_key를 생성하고 관리해야 합니다.
Airflow timezone 정리
•
airflow.cfg에는 두 종류의 타임존 관련 키가 존재
a. default_timezone
b. default_ui_timezone
•
start_date, end_date, schedule(schedule_interval)
a. default_timezone에 지정된 타임 존을 따름
•
execution_date와 로그 시간
◦
항상 UTC를 따름
◦
즉 execution_date를 사용할 때는 타임 존을 고려해서 변환 후 사용 필요
•
현재로 가장 좋은 방법은 UTC를 일관되게 사용하는 것으로 보임
◦
섞어쓰면 헷갈림
Docker container 내 위치
•
컨테이너 접속 후 찾기
Airflow cfg 예시
core 섹션
scheduler 섹션
Celery / Webserver섹션
•
Parallelism & worker_concurrency 파라미터 이해
동시에 수행될 수 있는 task 개수 최대 10,000개로 설정하고 싶은 경우
10000 = 2(scheduler) * parallelism = 4(worker) * worker_concurrency
api 섹션
현재 외부에서 access 불가하게 세팅되어 있음
에어플로우 정보를 메타 DB에 저장할 때, 암호화 여부