Airflow는 엔지니어들이 셋업하지만 데이터를 주로 사용하는 사람들은 비개발자(데이터 분석, 영업팀, 마케팅팀 등)인 경우가 많다. 데이터를 개발자, 비개발자는 모두 구글 스프레드시트를 쉽게 사용하고 이 시트에 데이터를 많이 저장하고 관리하기 때문에 이 시트를 Airflow와 연동하는 방법에 대해서 알아보자.
Airflow에 구글 스프레드시트를 연동하기 위해서는 세팅이 필요하다.
프로젝트 선택
버튼을 누른다. 새로 뜨는 창에서 새 프로젝트
를 클릭한다.만들기
버튼을 클릭한다. 위치는 현재 무직이라 아무것도 없으니 선택하지 않아도 된다!Google Sheets API
활성화할 수 있는 화면으로 넘어온다. 사용
버튼을 눌러 활성화 시킨다.사용자 인증 정보
탭에 들어가서 사용자 인증 정보 만들기
를 열고 서비스 계정
을 클릭해 들어간다.서비스 계정 이름
에 원하는 이름을 작성하면 서비스 계정 ID
가 자동으로 생성되고 그 아래에 이메일 주소(빨간 네모)가 생긴다. 이 주소를 사용하는 것!!! 만들고 계속하기
버튼을 클릭해서 다음 단계로 넘어간다.편집자
를 주고 계속
버튼을 눌러 다음 단계로 넘어간다.완료
를 눌러 서비스 계정을 생성한다.사용자 인증 정보
탭에 내가 만든 서비스 계정이 있는 것을 확인할 수 있다. 이메일(빨간 네모)을 클릭해서 상세 페이지로 이동한다.키
탭으로 넘어가 키 추가
버튼을 누르고 새 키 만들기
를 눌러 키를 생성한다.JSON
을 선택하고 만들기
버튼을 누른다. 자동으로 JSON 파일이 저장되고 이 파일을 DAG에 연결해야하므로 이 파일을 잘 저장하고 있어야 한다.여기까지 하면 서비스 계정을 만들고 Airflow에 연결하는 작업까지 끝난 것이다.
이메일은 1)-9 과정에서 만났던 이메일 주소를 copy해서 사용해도 되고 다운로드받은 JSON 파일에서 client_email
키의 값을 copy해서 사용해도 된다.
공유
버틀을 클릭한다.뷰어
, 수정까지 할 것이라면 편집자
로 세팅한다.이메일 알림 보내기
체크를 해제했지만 사실 아무 상관 없다.이제 설정한 구글 시트는 아까 JSON 파일 내용을 Variables로 저장한 Airflow에서 사용할 수 있다.
Airflow DAG에서 사용하기 위해 설정을 해줘야한다.
JSON 파일의 내용은 기밀사항이기 때문에 Docker Image안에 저장해서 옮길 수 없기 때문에 Variables를 사용하여 해당 구글 시트에 접속할 때마다 JSON 파일을 생성하여 사용한다.
from airflow.models import Variable
from oauth2client.service_account import ServiceAccountCredentials
import gspread
# data를 저장하고 불러올 경로
data_dir = Variable.get("DATA_DIR")
# 구글시트 인증 json 파일을 만들기 위한 경로
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
gs_json_file_path = data_dir + 'google-sheet.json'
# JSON 생성
write_variable_to_local_file('google_sheet_access_token', gs_json_file_path)
# JSON 파일을 사용하여 구글 시트에 접속 인증
credentials = ServiceAccountCredentials.from_json_keyfile_name(gs_json_file_path, scope)
gc = gspread.authorize(credentials)
위의 3개의 과정을 거쳐서 구글 시트와 airflow dag를 연동해서 사용할 수 있도록 세팅을 했다.
Dag의 내용은 자신이 원하는 대로 python operator와 helper 함수를 작성하여 사용하면 된다.
예시 처럼 원하는 방식을 만들어서 그대로 구현하여 사용하면 완료!