11주차 화요일, 52일차 Today I Learned
Airflow 고급기능 (2)
: 구글시트 연동, API 및 Airflow 모니터링
✏️ 학습 내용
1. 구글시트 연동 (Gsheet -> Redshift)
구글 시트를 SQL문을 사용하여 Redshift 테이블로 복사하는 업무자동화 DAG를 구현해보자.
① 구글 클라우드 로그인하여, 구글시트 API 활성화 (ENABLE)
② 구글 서비스 어카운트 생성 후 JSON 파일로 다운로드 → 이 내용을 Variable로 등록 (④)
③ 구글시트에 이메일 (JSON 파일에서 확인 가능) 공유 (Editor 권한 부여)
④ Ariflow DAG쪽에서 해당 JSON 파일로 인증 (Variable로 등록하기)
⑤ DAG 실행하면 완료 (연동하는 실행 파일은 아래 참고)
2. 구글시트 연동 (Redshift -> Gsheet)
SQL 결과를 구글시트에 저장하는 DAG를 구현해보자.
① 컨테이너 안에서 SQL to Sheet 내용을 담은 DAG 파일 실행 (날짜는 의미 없으므로 미래 아무때나로 지정)
$ airflow dags test SQL_to_Sheet 2024-12-31
② 만약 필요하다면 Table 내용을 바꾸기 위해서는 새 터미널에서 파일 수정 → 내용 수정 후 다시 실행하면 수정 반영됨을 확인 가능
$ cd dags
$ vi SQL_to_Sheet.py
3. API & Airflow 모니터링
Airflow가 제공해주는 API에 대해 알아보고, 이를 이용해 모니터링 방법에 대해 알아보자.
Airflow API 활성화
https://airflow.apache.org/docs/apache-airflow/stable/security/api.html
airflow.cfg의 api 섹션에서 auth_backend의 값을 변경하면 된다. 그리고 `airflow config get-value api auth_backend` 명령으로 확인할 수 있다.
auth_backend = airflow.api.auth.backend.basic_auth
$ docker exec -it learn-airflow-airflow-scheduler-1 airflow config get-value api auth_backend
airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session
Airflow Web UI에서 새로운 사용자 추가 후에 API 호출 시 에러가 발생하는지 아닌지 확인할 수 있다. 404, 500은 웹 서버가 다운되었음을 뜻하고, 그 외 400번대, 500번대는 웹서버 자체에 문제가 있을 수도 있다는 뜻이다.
# health API 호출
$ curl -X GET --user "monitor:MonitorUser1" http://localhost:8080/health
Airflow API 사용 예시
Airflow API를 사용하는 다양한 방법들이 있다. 아래에 적은 것 외에도 다양한 방법이 있다.
- API 레퍼런스 살펴보기
- 특정 DAG를 API로 트리거하기
- 웹 서버 안에서 실행 (트리거하려는 DAG : HelloWorld)
$curl -X POST --user "airflow:airflow" -H 'Content-Type: application/json' -d '{"execution_date":"2023-05-24T00:00:00Z"}' "http://localhost:8080/api/v1/dags/HelloWorld/dagRuns"
- 모든 DAG 리스트하기 : `curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/dags`
- 모든 Variable 리스트하기 : `curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/variables`
- 모든 Config 리스트하기 : `curl -X GET --user "airflow:airflow" http://localhost:8080/api/v1/config`
터미널에서 명령어 실행하면 확인 가능하다. Config의 경우 보안 때문에 막히는데, 이를 해결하려면 docker-compose.yaml에서 airflow-common > environments 밑에 `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'` 이렇게 설정해주면 된다.
💡 배운 점
- 구글 시트 연동에 대해 배웠다.
- 구글 시트를 SQL문을 사용하여 Redshift 테이블로 복사하는 업무자동화 DAG를 구현해봤다.
- SQL 결과를 구글시트에 저장하는 DAG를 구현해봤다.
- Airflow가 제공해주는 API에 대해 알아봤다.
- API를 이용해서 모니터링하는 방법에 대해 알아봤다.
📝 남아있는 의문과 개선점
- Airflow API 활용 등
☁️ 소감
요즘 기록에 대해서, 메모하는 방법에 대해서 고민이 많다. 무작정 속기하는 것만이 아니라 배운 것을 다음에도 정확하게 기억할 수 있으면서도 명확하게 기록하고 싶다. 이 습관을 올바르게 기른다면, 강의를 통해 데이터 엔지니어링에 대해 배우면서도 부가적으로 얻어가는 것이 생길 것이다.
구글 시트와 연동하는 실습은 업무 자동화에 있어서 중요한 부분이다. 비개발자이면 보통 구글 공유문서에서 같이 작업하는 경우가 많을텐데, 반복적으로 데이터를 옮겨야 하는 일이 있다면 이를 일일히 작업하는 것보다 한 번 데이터 파이프라인으로 구현해놓으면 훨씬 편리할 것 같다.
Airflow의 API에 대해서는 좀 더 자세히 봐야 할 것 같다. 지금은 그냥 단순히 Airflow API를 통해 모니터링이 가능하구나! 정도의 수준의 이해가 되어 있다.