홍카나의 공부방

[Airflow] Airflow.cfg 일부 살펴보기 본문

Data Engineering/Airflow

[Airflow] Airflow.cfg 일부 살펴보기

홍문관카페나무 2023. 6. 6. 11:55

airflow를 설치할 때 Airflow.cfg도 함께 제공된다.

이 파일로 airflow의 동작, 설정, 옵션을 수정할 수 있는데

파일 안에 뭐가 있는지 알아야 맛보고 즐길 수 있을 것이다.

 

airflow.cfg 내부의 일부분을 살펴본다.

docker를 사용하고 있다면, airflow-webserver 컨테이너 내부의 airflow.cfg를 살펴보면 되겠다.

(이 글은 airflow 2.5.1 버전을 기준으로 작성되었다.)

 

 


1. DAGs 폴더는 어디에 지정되는가?

 

dags_folder

dags_folder 변수에 절대 경로로 DAG들이 저장되는 폴더를 지정할 수 있다.

보통 코드 레파지토리의 하위폴더 경로로 설정한다고 한다. 기본 값은 /opt/airflow/dags 일 것이다.

 


2. DAGs 폴더에 새로운 Dag를 만들면 언제 실제로 Airflow 시스템에서 이를 알게 되나?

 

dag_dir_list_interval

DAGs 디렉토리를 스캔하여 새로운 파일을 찾는 주기의 기본 값은 300초(5분)다.

dag_dir_list_interval 변수의 값을 수정해주면 주기를 바꿀 수 있다.

스케쥴러의 실행 주기를 설정하는 scheduler_heartbeat_sec와 혼동하지 말 것!

 


3. Airflow를 API 형태로 외부에서 조작하고 싶다면, 어느 섹션을 변경해야 하는가? - auth_backends

 

API 조작 관련

 

정답은 나왔지만, airflow.cfg의 [api] 섹션에서는 API와 관련된 설정을 변경할 수 있으므로 이를 하나씩 살펴본다.

 

(1) enable_experimental_api : 실험적인 API를 활성/비활성할 수 있는 토글형 변수다. airflow 2.0 이후에는 Experimental_api가 비활성화(deprecated)되고, Stable REST API로 대체되었기 때문에 기본 값은 False다.

 

(2) auth_backends : API 사용자 인증에 사용할 인증 백엔드를 지정한다.

이 값을 airflow.api.auth.backend.basic_auth(ID/PW로 인증하는 형태)로 변경하면 API 형태로 외부에서 조작할 수 있다.

(session으로 기본 값이 되어 있을 텐데, 이러면 외부에서 API 형태로 제어가 불가능하다.)

 

(3) maximum_page_limit : API 요청에 대한 최대 페이지 제한을 설정하는 데 사용한다. default는 100이다.

Airflow API는 데이터 양이 많은 경우 페이징(paging) 기능을 제공한다. 페이징은 대량의 데이터를 작은 단위로 나누어 여러 페이지로 나누는 것을 의미한다. 이 값보다 요청된 페이지 수가 많으면, 값 이상의 페이지는 무시된다.

 

[api]
access_control_allow_headers = Content-Type, Authorization

access_control_allow_methods = GET, POST

access_control_allow_origins = https://naver.com

(4) access_control_allow_headers : 브라우저에게 허용되는 HTTP 헤더를 알려주는 역할을 하는 변수다. 예를 들어, "Content-Type, Authorization"이라는 값이 설정되어 있다면, 서버가 브라우저에게 해당 변수의 헤더만 사용할 수 있다는 응답을 반환한다.

 

CORS 메커니즘의 사전검사 단계에서 브라우저가 서버에게 Access-Control-Request-Headers 헤더를 포함한 사전검사 요청을 보내게 되는데, 이 요청에 대한 응답으로 access_control_allow_headers에 지정된 헤더를 반환하게 된다. 같은 맥락으로 methods는 요청 가능한 HTTP Request의 종류(GET, POST등)를 담고 있는 변수다.

 

origins는 요청을 보낼 수 있는 도메인 주소를 나타낸다. 즉, https://naver.com 으로 담겨있으면 네이버 도메인에서 오는 HTTP 요청만 허용한다는 것이다.

 


4. Variable에서 변수의 값이 encrypted가 되려면 변수의 이름에 어떤 단어들이 들어가야 한다. 이 단어들은 무엇일까?

airflow web UI : variables

 

이거는 airflow.cfg와는 약간 거리가 있지만 정리를 해두자면

위 사진처럼 변수의 value를 *****로 암호화 시키려면, 변수 이름에 다음과 같은 키워드를 포함시키면 된다.

secret, password, passwd, authorization, api_key, apikey, access_token

 


5. Metadata DB의 내용을 암호화하는데 사용되는 키는 무엇인가?

fernet_key

fernet_key를 사용하여 Metadata DB의 내용을 암호화할 수 있다.

이 키는 암호화 및 복호화에 사용되는 대칭키다.

해당 변수에 값을 넣으면 외부 노출에 신경써야 한다.

 


6. 환경 설정 파일이 수정되었다면 이를 실제로 반영하기 위해서 해야 하는 일은?

sudo systemctl restart airflow-webserver
sudo systemctl restart airflow-scheduler

airflow db init을 하게 되면 메타 데이터 DB가 초기화 되므로,

airflow db init 대신 위 명령어로 서비스를 restart하자.

Docker의 경우 Docker 컨테이너를 재실행한다.

 



7. Airflow administrator chose not to expose the configuration 문제 해결

 

 

Docker Desktop에 올린 airflow 기준으로

웹서버 컨테이너에서 opt/airflow/airflow.cfg의

expose_config를 True로 바꿔준다.

 

반응형