일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- linux
- sql
- TCP
- 데이터엔지니어링
- 정리
- Django
- 데이터 파이프라인
- HADOOP
- 컴퓨터네트워크
- 가상환경
- airflow.cfg
- dockerfile
- Go
- 데이터 엔지니어링
- 컴퓨터 네트워크
- PYTHON
- 종류
- S3
- Docker
- 데이터베이스
- 운영체제
- TIL
- redshift
- AWS
- 자료구조
- 파이썬
- airflow
- http
- 데이터 웨어하우스
- 데브코스
- Today
- Total
홍카나의 공부방
[Airflow] Airflow.cfg 일부 살펴보기 본문
airflow를 설치할 때 Airflow.cfg도 함께 제공된다.
이 파일로 airflow의 동작, 설정, 옵션을 수정할 수 있는데
파일 안에 뭐가 있는지 알아야 맛보고 즐길 수 있을 것이다.
airflow.cfg 내부의 일부분을 살펴본다.
docker를 사용하고 있다면, airflow-webserver 컨테이너 내부의 airflow.cfg를 살펴보면 되겠다.
(이 글은 airflow 2.5.1 버전을 기준으로 작성되었다.)
1. DAGs 폴더는 어디에 지정되는가?
dags_folder 변수에 절대 경로로 DAG들이 저장되는 폴더를 지정할 수 있다.
보통 코드 레파지토리의 하위폴더 경로로 설정한다고 한다. 기본 값은 /opt/airflow/dags 일 것이다.
2. DAGs 폴더에 새로운 Dag를 만들면 언제 실제로 Airflow 시스템에서 이를 알게 되나?
DAGs 디렉토리를 스캔하여 새로운 파일을 찾는 주기의 기본 값은 300초(5분)다.
dag_dir_list_interval 변수의 값을 수정해주면 주기를 바꿀 수 있다.
스케쥴러의 실행 주기를 설정하는 scheduler_heartbeat_sec와 혼동하지 말 것!
3. Airflow를 API 형태로 외부에서 조작하고 싶다면, 어느 섹션을 변경해야 하는가? - auth_backends
정답은 나왔지만, 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.cfg와는 약간 거리가 있지만 정리를 해두자면
위 사진처럼 변수의 value를 *****로 암호화 시키려면, 변수 이름에 다음과 같은 키워드를 포함시키면 된다.
secret, password, passwd, authorization, api_key, apikey, access_token
5. Metadata DB의 내용을 암호화하는데 사용되는 키는 무엇인가?
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로 바꿔준다.
'Data Engineering > Airflow' 카테고리의 다른 글
[Airflow] cfg에서의 Timezone (0) | 2023.06.21 |
---|---|
[Airflow] task 실패시 분석하기 (1) | 2023.06.06 |
[Airflow] CLI에서 Docker Airflow 로그인 (0) | 2023.06.04 |
[Airflow] Airflow 소개와 구성 (0) | 2023.05.29 |
[DE] 데이터 파이프라인의 종류와 만들 때 고려할 점들 (1) | 2023.05.29 |