Apache Airflow

[Airflow] Meta DB로 MySQL 연결

비번변경 2023. 4. 6. 18:32

개요

Airflow는 기본적으로 Meta DB로 SQLite를 사용한다. 하지만 SQLite는 동시 접속이 불가능해 운영환경에는 적합하지 않아 공식문서에서도 변경하여 사용하기를 권장하고 있다. 보통 PostgreSQL과 MySQL을 사용하는 것 같은데, 이 글에서는 MySQL을 연결한다.

 

Airflow와 MySQL은 이미 설치되어 있다고 가정한다.

 

 

MySQL 설정

Airflow가 사용할 데이터베이스와 서비스 계정을 생성한다.

 

데이터베이스 생성

CREATE DATABASE airflow CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

서비스 계정 생성

CREATE USER 'airflow' IDENTIFIED BY 'airflow1234';
GRANT ALL PRIVILEGES ON airflow.* TO 'airflow';

 

explicit-defaults-for-timestamp 설정 확인

해당 값이 활성화되어 있는지 확인한다.

mysqld --verbose --help

 

 

Airflow 설정

1. MySQL 연결 드라이버 설치

pip install mysqlclient

 

2. airflow.cfg 편집

Airflow 구성 파일을 확인하면 sql_alchemy_conn 값이 sqlite로 설정되어 있는 것을 확인할 수 있다.

이 값을 아래 형식으로 변경한다.

 

mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

# 예시
sql_alchemy_conn = mysql+mysqldb://airflow:airflow1234@ip-172-31-00-00.ap-northeast-2.compute.internal:3306/airflow

 

그리고 Airflow가 MySQL 8의 기본 문자 집합인 utf8mb4을 사용하도록 설정한다.

sql_engine_collation_for_ids=utf8mb3_bin

 

3. Database 초기화

Airflow Meta DB를 다시 초기화한다.

airflow db init

데이터베이스에 접속해서 테이블이 생성되었는지 확인한다.

Airflow user도 다시 생성한다.

airflow users create \
    --username admin \
    --firstname Peter \
    --lastname Parker \
    --role Admin \
    --email spiderman@superhero.org \
    --password PASSWD

 

4. Airflow 실행

airflow scheduler -D
airflow webserver --port 8080 -D

 

 

참고 문서

https://airflow.apache.org/docs/apache-airflow/stable/howto/set-up-database.html#database-uri