개요
Airflow는 기본적으로 Meta DB로 SQLite를 사용한다. 하지만 SQLite는 동시 접속이 불가능해 운영환경에는 적합하지 않아 공식문서에서도 변경하여 사용하기를 권장하고 있다.
보통 PostgreSQL과 MySQL을 사용하는 것 같은데, MySQL보다는 PostgreSQL이 Airflow와 좀 더 잘 맞는다고 한다.
이 글에서는 Airflow Meta DB를 PostgreSQL로 설정해보려고 한다. Airflow는 이미 설치되어 있다고 가정한다.
- 2022.07.22 - [Apache Airflow] 설치 / 실행 (버전 2.3)
PostgreSQL 설치
2023.04.04 - [Ubuntu] PostgreSQL 설치 및 실행을 작성했었는데…… 해결되지 않는 오류가 발생해서 Docker를 이용해 다시 설치해보려고 한다.
Docker 설치
apt install docker.io
PostgreSQL 배포
Docker Hub\posgreSQL 공식 저장소 : https://hub.docker.com/_/postgres
저장소에서 적당한 이미지를 이용해 PostgreSQL을 배포한다. Airflow 버전에 따라 사용할 수 있는 PostgreSQL 버전을 확인해야 한다.
docker run \
--name postgres \
-e POSTGRES_USER=airflow \
-e POSTGRES_PASSWORD=1234 \
-p 5432:5432 \
postgres:13
데이터베이스 사용자 정보를 함께 전달하여 동작시킨다.
혹시 host에 직접 설치한 사람은 접은 글을 참고한다.
PostgreSQL 설정
Airflow가 사용할 데이터베이스와 서비스 계정을 생성한다.
접속
su - postgres
psql
데이터베이스 생성
CREATE DATABASE airflow;
서비스 계정 생성
-- 계정 생성
CREATE USER airflow WITH ENCRYPTED PASSWORD 'airflow1234';
-- 권한 부여
GRANT ALL PRIVILEGES ON DATABASE airflow TO airflow;
Airflow 설정
1. PostgreSQL 연결 드라이버 설치
pip install psycopg2
Airflow가 venv나 conda 같은 가상 환경에 설치되어 있다면 해당 환경에서 psycopg2를 설치한다.
💡 error: invalid command 'bdist_wheel' 발생 시
pip install wheel
💡 error: command 'aarch64-linux-gnu-gcc' failed with exit status 1 발생 시
이 글의 경우, 에러 메시지를 살펴보면 libpq-fe.h: No such file or directory라는 메시지를 확인할 수 있었다. 이 경우, libpq-dev 패키지를 설치하면 해결된다.
apt install libpq-dev
2. airflow.cfg 편집
Airflow 구성 파일을 확인하면 sql_alchemy_conn 값이 sqlite로 설정되어 있는 것을 확인할 수 있다.
이 값을 아래 형식으로 변경한다.
postgresql+psycopg2://<user>:<password>@<host>/<db>
# 예시
postgresql+psycopg2://airflow:airflow1234@localhost/airflow
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
Airflow 실행
Airflow 실행하여 정상적으로 동작하는지 확인한다.
airflow scheduler -D
airflow webserver --port 8080 -D
참고 문서
https://airflow.apache.org/docs/apache-airflow/stable/howto/set-up-database.html#database-uri