[airflow dbt] 1. airflowdbt-day1-1-airflow환경설정

data_hamster·2023년 8월 5일
0

ELT, 구글시트, 슬랙 연동


ELT 구현을 에어플로우 상의 대그로 만들어본다
후반에 DBT로 바꿔볼 예정

슬랙을 연동을 해서 에어플로 대그 태스크 실행 중 에러 발생 시,
슬랙의 특정워크스페이스, 채널로 에러 보내보기.

슬랙의 앱을 설정하는 방법에 대해 알아본다.

레드쉬프트 테이블 내용 SELECT 결과를 구글 시트의 탭으로 복사

3.4. 구글 클라우드에 API 활성화, 서비스 어카운트 (조금 복잡함)

  1. 에어플로우를 API를 열어놓고 외부에서 API로 제어할 수 있게 세팅하는 방법. 몇개의 사용 예. 데모를 하고

  2. 숙제.


에어플로우를 도커 컴포즈로 다시 실행.
도커 세팅을 어떻게 하는게 좋은지 다시 얘기해본다.

에어플로우 ignore 설명 안했는데 이것도 다뤄본


터미널 프로그램 실행.
이미 repo를 받아놨다면 그사이 바뀐 내용이 있기에 git pull로 받음.

2.5.1에 해당하는 yaml을 받으면 됨.


환경변수를 수정해야함.
airflow common이라고 모든 컨테이너들에게 공통적으로 적용되는 부분

나의 경우 별도의 도커파일에 들어가 있었음. 도커파일에 넣음.

:- 만약에 PIP 이름의 변수가 있으면 저걸 가져다 하고, 없으면 - 이후의 모듈을 가져다 설치해라. (에어플로우 컨테이너가 실행될때)
일종의 if문 같은 것임.

임시파일을 위해 volumes 밑에 data 볼륨을 만들었음.
도커 컴포즈가 실행된 데이터 폴더를 오른쪽 위치에 마운트 하겠다는 뜻.
뒤에 바꿔줘야할게 또 있음
airflow-init에 가보면
data를 추가해주면 됨.

DATADIR로 이름을 주었음.
웹UI에서 어드민에서 variables에 가서 추가했었는데, 꼭 이렇게 안하고 에어플로우 실행하는 도커 컨테이너 환경변수에서 AIRFLOW_VAR
로시작하면 이 var 값은 그 뒤의 값으로 세팅이 됨.
에어플로우 관점에서 보면 DATA_DIR이라는 이름의 변수가 생기고 그 변수의 값으로 /data값이 되는 것임.
문제: 웹 UI에는 안보이기 때문에 헤멜수가 있음. 개발자 관점에선 똑같음.
에어플로우 커넥션도 마찬가지임. 환경변수를 써서 대문자로
AIRFLOW_CONN -> 커넥션 정보. 문자열을 넣어주면 들어감.

모든걸 자동화하는 측면에선 환경변수가 좋을 수도 있음.

디버깅을 잘 하기위해 data를 호스트 볼륨으로 만듦.
init 밑에 추가적으로 폴더를 생성해줌. 그리고 유저가 권한을 갖도록 함.


도커 컴포즈 야멀가지고 실행을 함.
docker compose가 최신
-d모드로 실행하면 바로 커맨드라인으로 빠져나옴.

depends on으로 걸
어놔서 airflow init 성공 후에 postgres 등이 실행되게 하였음.



변수가 역시 없다.

sudo docker exec -it learn-airflow-airflow-scheduler-1 airflow variables get DATA_DIR

https://velog.io/@sophi_e/Airflow-docker-compose%EB%A1%9C-%EC%97%90%EC%96%B4%ED%94%8C%EB%A1%9C%EC%9A%B0-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

마찬가지로
이번에도 환경변수 설정을 해주니까 잘 됨

  • data 폴더도 생성함.
mkdir -p ./dags ./logs ./plugins ./data # mkdir -p 옵션 : 여러 하위 디렉토리를 생성시에 사용한다.
echo -e "AIRFLOW_UID=$(id -u)" > .env

AIRFLOW_UID=50000

에어플로우 2개 있는데 둘다 정상적으로 돌아가고 DB도 별도로 돌아가는 것을 확인함.
앞으로는 learn airflow가지고 수업 진행.
-> 전에 건드렸던 설정들이 충돌일으킬까봐


잘 나오는 것을 확인.

variables, connections 관계된 조작을 할 수 있음
get을 하고 변수 이름을 주면 프린트가 됨.

내가 대그를 개발하다보면 변수들 관리를 해줘야함.
yaml 파일에 VAR로 값을 주고
CONN 형태로 주고 하면 자동화가 됨.
웹UI에 부가적으로 세팅하지 않아도 됨.


에어플로우 버전관리 고민.
어떤 에어플로우 환경들로 설정될지

대그들.
깃헙 리포로 존재할 것임. 깃헙 리포에 있는 dags 폴더가 핵심이 됨.
airflow 환경설정 변수들 VAR, CONN 어케 관리?
도커 컴포즈 yaml에서 관리하는게 좋음

처음에는 깃헙 리포 dags 소스코드 관리되는 곳에 yaml을 같이 관리하는게 제일 편리
나중에 데브옵스와 논의하기.
그 아이디 비번 이런거 어떻게 숨겨야하는지...?

혼자하면 그냥 깃헙 리포에 넣고 관리.

yaml에서 설정해주면 됨.
또는 시크릿 백엔드를 할 수 있는데 이게 더 안전하기도 함.


도커 이미지로 어디까지 커스텀 할 것인가?
현재는 아파치에서 유지해주느걸 가져다 씀.
주석이 있고 아래 images가 있었음. :- 문법을 써가지고 없으면 2.5.1을 사용하게 되어있었다.

직접 만든 에어플로우 이미지를 쓴다면 어디까지 넣을 것인지? 일반적으론 대그스를 넣어서 에어플로우 이미지를 만들고, 이를 도커 컴포즈에서 사용하는게 좋음. 프로덕션 세팅이라면.

개발중이라면 매번 에어플로우 도커이미지를 새로만들면서 대그스 소스코드 복사가 번거로움.
개발할 때는 호스트 볼륨을 써가지고, 이미지 자체는 대그스 폴더가 안들어가고, 공용 에어플로우 이미지를 베이스로 쓰고, 대그스 폴더 자체는 로컬에서 마운트해서 사용하게 함.


공식이미지? 어디까지 넣을것인가?
환경설정 자체는 도커 컴포즈에서 설정하는게 좋음.

프로덕션이라면 에어플로우 이미지를 만들고 대그스 폴더 내용을 그대로 카피해서 올리기.
개발환경이라면 로컬에서 대그스 폴더를 마운트 해서 사용


깃에보면 .ignore, 도커도 있었음.
에어플로우에도 있음
대그 폴더에 있어야하는 파일

에어플로우는 대그를 airflow.cfg 에서 세팅된 패스에 가서 어떤 파일들이 있는지 쭉 스캔을 해보고 , 서브 폴더도 리컬시브하게 쫒아감. 파이썬 파일들을 쭉 스캔해서 어떤게 추가됐는지 찾게됨. 5분에 한번씩. 이때 스캔을 하는 방식이 뒤져보다가 대그인지 알기 힘드니 실행해보고 알아냄. 그러다보면 사고가 남. 개발자가 개발하다 만 대그를 집어넣고 활성화 안했으니 실행 안했지만, 메인 엔트리포인트에 코드남겨놓으면 그게 실행되어버림. 5분마다 내가 대그로 론치하지 않은 코드가 실행이 되어버림. .airflowignore에 이런 파일을 제외시킬 수 있음

정규식 패턴으로 제외시킴
projecta
tenant
[\d] -> 숫자 하나가 들어간 형태

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글