DevCourse TIL Final Project #9 GCP

김태준·2023년 8월 29일
1

Data Enginnering DevCourse

목록 보기
91/93
post-thumbnail

✅ VM에 Airflow 연동

GCP VM 인스턴스에 Airflow 설치하는 방법.

    1. 우선 VM 인스턴스를 생성한 후 외부 IP, 내부 IP가 자동적으로 할당되는데 Airflow web UI의 IP를 고정시키기 위해 고정 IP로 승급을 진행해준다.
    1. GCP 콘솔 내 VM 인스턴스에 접속한 후 SSH연결을 진행하여 아래 코드를 실행시켜준다.
sudo apt update
sudo apt install python3-pip
$ pip install virtualenv
$ cd ~/
$ virtualenv airflowenv
$ source ~/airflowenv/bin/activate
$ pip install psycopg2-binary
# airflow 환경변수를 bash_profile에 추가합니다.

$ echo 'export AIRFLOW_HOME=~/airflow' >> ~/.bash_profile
$ source ~/.bash_profile
# 파이썬 버전에 맞는 2.4.3 버전의 에어플로우를 설치합니다.
AIRFLOW_VERSION=2.4.3
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

# airflow 초기화를 진행합니다.
airflow standalone
    1. airflow 방화벽 허용하기 (1에서 진행한 고정 IP 설정, (네트워크 보안 -> 방화벽 규칙 생성)방화벽 설정 변경(8080 포트 접속 허가)
    1. airflow 웹 UI 접속하여 방화벽, 고정 IP 체크
    1. Airflow의 default db는 SQLite, 하지만 SQLite의 경우 직렬 처리이므로 병렬 처리가 가능한 PostgreSQL 인스턴스 만들어주기 (메뉴 -> 데이터베이스 -> SQL -> PostgreSQL 만들기)
    1. PostgreSQL 인스턴스와 Airflow 고정 IP 연결 (Cloud Proxy 필요)
    1. PostgreSQL 사용가능하도록 User 추가 및 권한 부여
    1. airflow.cfg 변경 (executor = SequentialExecutor -> LocalExecutor), sql_alchemy_conn = postgresql+psycopg2://gcpdevuser:airflow@<PostgreSQL db 인스턴스 주소>/db_airflow
    1. source ~/airflowenv/bin/activate (가상환경 실행 후 airflow db init 으로 db 재설정 (postgresql로 변경)
    1. 웹서버 구동 (기존 서버 진행 중인 것 중단 후 재시작 필요.)
    1. sudo lsof -i tcp:8080 (현재 PID 목록 확인)
    1. sudo lsof -i tcp:8080 | grep 'gcpdevuser' | awk '{print $2}' | xargs kill -9 명령어로 PID User 모두 중단 후 11번 목록 다시 확인해 clear 여부 확인
    1. airflow webserver --port=8080 명령어로 웹서버 시작.
    1. user를 모두 지웠기에 새로 생성.
코드를 입력하세요
    1. Airflow web 접속해 dag list 없어진 것 확인

✅ Dag 작성하기.

앞서 vm 내 인스턴스들을 만들어 Airflow 서버를 띄웠고, PostgreSQL 역시 인스턴스를 만들어 airflow 환경 구축을 완료하였다. 추가로 예시로 주어지는 dag 샘플들을 지웠고 db 역시 PostgreSQL과 연동하는 작업을 완료하였다.

# 가상환경 접속
source airflowenv/bin/activate
# airflow에서 사용 가능한 인터페이스 설명 목록 확인 
airflow -h
# airflow db 관련 명령어
airflow db -h
# airflow users 관련 명령어
airflow users -h
# 사용자 생성에 대한 명령어, 사용자 생성 규칙
airflow uses create -h

# 위 코드를 보면 scheduler가 없다고 하므로 아래 코드 실행.
airflow scheduler
# dag 파일 리스트 확인
airflow dags list
# 해당 dag파일의 task 리스트 확인
airflow tasks list dag 파일명
# 특정 dag 파일 작동
airflow dags trigger -e 날짜(ex : 2023-08-20) example_xcom_args

현재 airflow 폴더 내 존재하는 파일, 폴더들은 다음과 같다.

  • airflow-webserver.pid : 웹 서버가 실행 중일 때 웹 서버의 PID(프로세스 ID)를 포함하는 파일, 웹 서버가 실행중인지 여부를 확인하거나 프로세스 종료 시 사용될 수 있음.
  • airflow.cfg : Airflow의 주요 설정 파일로, 워크플로우 관리, DB 연결, 보안 설정, Executor 설정 등 다양한 설정 포함. (환경 설정 및 구축할 수 있는 파일)
  • airflow.db : Airflow의 db파일. Airflow는 작업 상태, 스케줄, dag 정보 및 로그 등을 DB에 저장하여 관리 (현재 PostgreSQL 인스턴스와 연동)
  • logs : Airflow 작업의 실행 로그가 저장되는 디렉토리로 각 dag 작업의 실행, 결과에 대한 로그 정보 저장
  • standalone_admin_password.txt : 웹 서버가 설치된 이후 web interface에 로그인 시 사용되는 admin 비밀번호가 저장된 파일. (보안 주의 必)
  • webserver_config.py : 웹 서버의 추가 설정을 정의하는 파일. 사용자 정의 설정 포함 가능.

airflow scheduler running 문제 해결 방법
-> airflow scheduler -D

profile
To be a DataScientist

0개의 댓글