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