Search

airflow.cfg, 타임존 설명

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에 저장할 때, 암호화 여부