터칭 데이터
ELT 작성과 구글시트/슬랙 연동 본문
1. ELT 작성과 구글시트/슬랙 연동
ELT 구현과 구글시트/슬랙 연동과 같은 다양한 DAG를 작성해보자
Contents
1. ELT 구현
2. Slack 연동하기
3. 구글 시트 연동하기 (1): 시트 => Redshift 테이블
4. 구글 시트 연동하기 (2): Redshift 테이블 => 시트
5. API & Airflow 모니터링
6. 숙제
Airflow Docker 환경부터 다시 설정
이번 강의를 진행하기 전에 먼저 Docker로 환경설정부터 다시 하자
다시 Docker 기반 Airflow 실행 (1)
먼저 터미널 프로그램을 실행하고 적당한 폴더로 이동
이미 learn-airflow Github repo를 다운로드받은 상황이라면
다운로드받은 repo 폴더로 이동
여기서 아래를 수행
- git pull
아니라면 아래를 수행
learn-airflow Github repo를 먼저 클론
- git clone https://github.com/learndataeng/learn-airflow.git
learn-airflow 폴더로 이동하고 2.5.1 이미지 관련 yml 파일 다운로드
- cd learn-airflow
- curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
다시 Docker 기반 Airflow 실행 (2)
docker-compose.yaml 수정
_PIP_ADDITIONAL_REQUIREMENTS 수정
data 폴더를 호스트 폴더에서 만들고 볼륨으로 공유: 임시 데이터를 저장할 폴더
- 이를 docker volume으로 지정해서 나중에 디버깅에 사용
environment:
AIRFLOW_VAR_DATA_DIR: /opt/airflow/data
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- yfinance pandas numpy
oauth2client gspread}
volumes:
…
- ${AIRFLOW_PROJ_DIR:-.}/data:/opt/airflow/data
airflow-init:
…
mkdir -p /sources/logs /sources/dags /sources/plugins /sources/data
chown -R "${AIRFLOW_UID}:0" /sources/{logs,dags,plugins,data}
_PIP_ADDITIONAL_REQUIREMENTS 뒤에 붙은 :- 는 if문으로 이해하시면 됩니다.
Airflow Web UI에서 Variables를 설정해주는 방법 외에도 AIRFLOW_VAR_DATA_DIR: /opt/airflow/data 와 같이 변수를 설정해줄 수도 있습니다. AIRFLOW_VAR_ 뒤에 있는 DATA_DIR이라는 이름의 Variable로 콜론(:)뒤에 있는 /opt/airflow/data를 값으로 지정한다는 뜻입니다.
CONNECTIONS 역시 AIRFLOW_CONN_로 Web UI가 아닌 방식으로 설정할 수 있습니다.
Web UI에서 보이지는 않으므로 약간 혼동스러울 수는 있지만 프로그램을 사용하는데는 큰 문제가 없으며 모든 것을 자동화한다는 측면에서는 위와 같은 방식이 더 유리합니다.
다시 Docker 기반 Airflow 실행 (3)
다음 명령을 수행. Detached 모드로 실행하려면 -d 옵션 지정 (-f 옵션도 존재)
docker compose up -d
docker compose가 아닌 다른 이름이라면 -f 옵션으로 그 이름을 적어줘야 한다고 지난 시간에 말씀드렸습니다.
정상 실행되었다면 위와 같을 것입니다.
init은 초기화라는 본연의 임무를 완료하면 비활성화 되는게 정상입니다.
다시 Docker 기반 Airflow 실행 (4)
http://localhost:8080으로 웹 UI 로그인
airflow:airflow 사용
앞서 설정한 DATA_DIR이란 변수는 Admin => Variables에 안 보임.
- DAG과 Airflow 환경 정보들은 Postgres의 Named Volume으로 유지되고 있음
- 환경변수로 설정한 것들은 Web UI에서는 안 보이지만 프로그램에서는 사용가능
$ docker exec -it learn-airflow-airflow-scheduler-1 airflow variables get DATA_DIR/opt/airflow/data
Airflow 명령 중에 tasks, dags말고도 variables와 connections 관련된 명령어도 존재합니다. 위의 커맨드는 ariflow scheduler에서 앞서 yaml파일에서 설정한 환경 변수인 DATA_DIR라는 variables를 get 명령어로 조회하는 명령입니다.
Variables/Connections 설정을 어떻게 관리하는 것이 좋을까?
이를 docker-compose.yaml에서 환경변수로 설정. 뒤에서 설명
고민 포인트: Airflow 실행환경 관리방안 (1)
기타 환경설정값들 (Variables, Connections 등등)을 어떻게 관리/배포할까?
보통 docker-compose.yml 파일에서 아래 부분에 정의
x-airflow-common:
&airflow-common
…
environment:
&airflow-common-env
AIRFLOW_VAR_DATA_DIR: /opt/airflow/data
AIRFLOW_CONN_TEST_ID: test_connection
환경 설정 값들은 git repo로 관리/배포하다 제대로 된 DevOps팀이 구성된다면 그 팀에서 관리/배포하는게 일반적입니다.
환경변수가 아니라 별도 credentials 전용 Secrets 백엔드라는 것을 사용하기도 함 (관심이 있다면 읽어보세요.)
고민 포인트: Airflow 실행환경 관리방안 (2)
어디까지 Airflow 이미지로 관리하고 무엇을 docker-compose.yml에서 관리할지 생각
이는 회사마다 조금씩 다름
Airflow 자체 이미지를 만들고 거기에 넣을지? 이 경우 환경변수를 자체 이미지에 넣고 이를 docker-compose.yaml 파일에서 사용
x-airflow-common:
&airflow-common
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.5.1}
AIRFLOW_IMAGE_NAME 환경변수가 정의되어 있다면 그걸 사용하고 아니면 기본값으로 apache/airflow:2.5.1
아니면 docker-compose.yaml에서 환경변수를 직접 설정
고민 포인트: Airflow DAG 관리방안
DAG 코드도 마찬가지
Airflow image로 DAG 코드를 복사하여 만드는 것이 좀더 깔끔
아니면 docker-compose에서 host volume 형태로 설정
- 이는 개발/테스트용으로 좀더 적합
팁: .airflowignore
Airflow의 DAG 스캔 패턴은?
dags_folder가 가리키는 폴더를 서브폴더들까지 다 스캔해서 DAG 모듈이 포함된 모든 파이썬 스크립트를 실행해서 새로운 DAG를 찾게 되며 이는 가끔 사고로 이어짐
Airflow가 의도적으로 무시해야 하는 DAG_FOLDER의 디렉터리 또는 파일을 지정
.airflowignore의 각 줄은 정규식 패턴으로 지정하며 매칭되는 파일들은 무시됨
project_a
tenant_[\d]
위의 경우 아래 파일들(경우들)이 무시됨
project_a_dag_1.py,
TESTING_project_a.py,
tenant_1.py,
project_a/dag_1.py
최종 수정 버전 docker-compose-test.yaml
앞서 변경 사항이 수정된 내용을 docker-compose-test.yaml이란 이름으로 저장했음
'Airflow 고급 기능, dbt, Data Catalog' 카테고리의 다른 글
Airflow와 구글시트 연동하기 - 개요와 sheet → Redshift (0) | 2024.01.02 |
---|---|
Slack 연동하기 (0) | 2024.01.02 |
Summary 테이블 구현 (0) | 2024.01.02 |
Airflow 환경설정 데모 (0) | 2024.01.01 |
개요 (0) | 2024.01.01 |