본문 바로가기
Dev Ops/Airflow

[Airflow 시리즈] Airflow + Mysql DB그리고... 대Python

by ErrorMin 2024. 10. 14.

 

Airflow

AWS Ec2 Ubuntu24.04

 

필요한거 설치 Airflow

 

디렉토리 시작 위치 : /home/ubuntu/

1. Venv 가상환경

Airflow에 필요한 패키지들을 설치하다 보면 Error가 보일지도 모른다. 그중 초반부 패키지들은 가상환경이 아닌 로컬에 설치를 할 경우
설치하기 싫다고 짜증을 부린다.

# 시작위치 : /home/ubunut/
python3 -m venv venv

# 가상환경 활성화
source venv/bin/activate

# 활성화 성공시
(venv) ubuntu@ip-111.......라고 나올것

 

2. Airflow 설치...전에 필요한 패키지 설치

# Airflow 필요 패키지 설치
sudo apt-get update

sudo apt install python3-pip

pip3 install cryptography psycopg2-binary boto3 botocore

sudo apt install libmysqlclient-dev -y

pip3 install mysqlclient

 

 

3. Airflow 설치

# 위치 : /home/ubuntu/

pip3 install apache-airflow

설치가 완료되면 /home/ubunut/venv/bin 위치에 airflow 관련 파일들이 저장된다.

cd ~

sudo vi .profile

export AIRFLOW_HOME=/home/ubuntu/venv/airflow

 

4. Sqlite DB를 초기화 하여 Airflow Web이 나오는지 확인

# Sqlite 초기화

/home/ubuntu/venv/bin/airflow db init

# Sqlite 유저 생성
/home/ubuntu/venv/bin/airflow users create \
 --username admin \
 --firstname Admin \
 --lastname admin \
 --role Admin \
 --email admin@test.com
 
 
# 위 내용 엔터시 사용할 비밀번호 입력란이 나오니 작성해 주세요.

 

/home/ubuntu/venv/bin/airflow webserver -p 8080

# 작성후 본인 Public IP + :8080
# 예시 : 127.0.0.1:8080

 

만약 AWS 서비스를 이용중인데 설치는 성공했지만 Airflow Web 실행이 안된다면 다음과 같이 보안그룹 인바운드를 확인해 주세요


사용자 지정 TCP     8080     사용자 지정  0:0:0:0 또는 본인 IP

 


5. Mysql

Airflow는 기본 DB가 Sqlite입니다. 파이썬기반이라 그래요 하지만 Airflow는 Sqlite를 사용하지말고 다른 DB를 제발 꼭 부탁드립니다. 수준으로 안내하고 있습니다. 본인들이 비는데 착한 우리들이 봐줘야지 어쩌겠습니까.

 

# myslq 설치

sudo apt install mysql-server -y


# Mysql 보안 설정

sudo mysql_secure_installation


# 보안 설정 시 다음 사항들을 확인하세요:
	새로운 MySQL root 비밀번호 설정
	익명 사용자 삭제
	원격 root 로그인 비활성화
	테스트 데이터베이스 삭제
	권한 테이블 재로드


# Airflow용 Mysql 데이터 베이스 . 및사용자 생성

sudo mysql -u root -p


#접속 후 아래 명령어 실행

CREATE DATABASE airflow;
CREATE USER 'airflow_user'@'localhost' IDENTIFIED BY 'airflow_password';
GRANT ALL PRIVILEGES ON airflow.* TO 'airflow_user'@'localhost';
FLUSH PRIVILEGES;



# 예시

CREATE DATABASE airflow;
CREATE USER 'root'@'localhost' IDENTIFIED BY '#rmfmfmrrmfmfmr123';
GRANT ALL PRIVILEGES ON airflow.* TO 'root'@'localhost';
FLUSH PRIVILEGES;


**airflow_user**는 Airflow에서 사용할 MySQL 사용자명입니다.
**airflow_password**는 해당 사용자의 비밀번호입니다.
**airflow**는 Airflow의 데이터베이스입니다.



---------------------------------------------------------------------------

# Airflow DB생성

create database airflow;


# root유저에게 AirflowDB권한 부여

grant all privileges on airflow.* to 'root'@'localhost';


# 나가기

EXIT

 

 

# airflow.cfg설정

sql_alchemy_conn = mysql://root:#rmfmfmrrmfmfmr123@localhost:3306/airflow
                           사용자명:비번@localhost


/home/ubuntu/venv/bin/airflow db init
# mysql에 meta가 생겼는지 확인

mysql -u root -p

show tables;

# mysql에 user등록 

/home/ubuntu/venv/bin/airflow users create \
 --username admin \
 --firstname Admin \
 --lastname test \
 --role Admin \
 --email admin@test.com
 
 
 
 # 서버 올려서 로그인 되는지 확인
 /home/ubuntu/venv/bin/airflow webserver -p 8080

 

 

 

6. Webserver, scheduler 데몬 등록

# dag 파일 만들기

cd /home/ubuntu/airflow

sudo mkdir dags



# 서비스파일 만들기

cd /etc/systemd/system

sudo vi airflow-webserver.service


-------------------------------------------------------
# airflow-webserver.service 입력


[Unit]
Description=Airflow webserver daemon
After=network.target mysql.service
wants=mysql.service

[Service]
Environment="PATH=/home/ubuntu/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
User=ubuntu
Group=ubuntu
Type=simple
ExecStart=/home/ubuntu/venv/bin/airflow webserver -p 8080
Restart=on-failure
RestartSec=5s
PrivateTmp=true

[Install]
WantedBy=multi-user.target



user, group은 따로 유저를 만들지 않은 이상, 호스트네임으로 설정
execStart는 webserver를 실행 시킬 수 있는 airflow모듈이 있는 위치를 지정하여 webserver 실행 명령어를 적어놓는다.
-------------------------------------------------------


-------------------------------------------------------
sudo vi airflow-scheduler.service


[Unit]
Description=Airflow webserver daemon
After=network.target mysql.service
wants=mysql.service

[Service]
Environment="PATH=/home/ubuntu/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
User=ubuntu
Group=ubuntu
Type=simple
ExecStart=/home/ubuntu/venv/bin/airflow scheduler
Restart=on-failure
RestartSec=5s
PrivateTmp=true

[Install]
WantedBy=multi-user.target

-------------------------------------------------------

 

데몬 재실행

sudo systemctl daemon-reload

 

서버 실행시 자동 시작

sudo systemctl enable airflow-webserver

sudo systemctl enable airflow-scheduler

 

서비스 시작

sudo systemctl start airflow-webserver

sudo systemctl start airflow-scheduler

 

서비스 상태 확인

sudo systemctl status airflow-webserver

sudo systemctl status airflow-scheduler

 

 

서비스가 열릴거에요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


참고: https://spidyweb.tistory.com/349

        gpt

 

'Dev Ops > Airflow' 카테고리의 다른 글

[Airflow 시리즈] Example DAG 삭제  (0) 2024.10.15
[Airflow 시리즈] AWS Server 구성  (1) 2024.10.14
[Airflow] 설치 1.10버전  (0) 2022.07.26