상세 컨텐츠

본문 제목

[AWS] Airflow 설치 - Rocky Linux

Data Platform/데이터 엔지니어링

by leediz 2022. 6. 7. 00:14

본문

Airflow 2.2.5 Installation

최근 프로그래머스 데이터 엔지니어링 스타터 키트 스터디에 참여하며 Airflow에 대해 학습했다. 스터디 당시에는 AWS EC2 인스턴스를 각 스터디원마다 나눠주어 직접 Airflow를 설치하는 과제를 통해 Airflow 실습을 진행했다. 당시 OS는 Ubuntu 18.04였는데 이번에는 설치했던 문서를 참고하여 Rocky Linux에 설치하는 방법을 정리해보겠다.

 

미리 준비할 사항

실습을 위해 AWS Rocky Linux 인스턴스가 준비되어야 하는데, 필요하면 Rocky Linux 테스트 서버를 만드는 포스팅을 참고하면 된다. 혹은 굳이 Rocky Linux가 아니더라도 CentOS 8이나 Redhat 계열의 OS면 실습을 따라하는데 문제가 없을것으로 예상되지만 직접 테스트해보지는 않아서 가급적 Rocky Linux로 따라하는 것을 추천한다.

 

버전 선택

2022.06.06 Google의 Composer 버전 문서를 기준으로 가장 최신 버전인 Airflow 2.2.5 버전과 Python 3.8 버전을 설치하여 진행했다.

 

파이썬 설치(Python Installation)

먼저 Rocky Linux의 소프트웨어 관리 툴인 dnf를 업데이트하고 파이썬 3.8을 설치한다.

$ sudo dnf update -y
$ sudo dnf install -y python38

잘 설치되었는지 버전을 확인한다.

$ python3 --version
Python 3.8.12

다음으로 Airflow 2.2.5 설치 및 필요한 모듈 설치한다.

$ sudo dnf -y install mysql-devel gcc python38-devel
$ sudo pip3 install numpy
$ sudo pip3 install pandas
$ sudo pip3 install apache-airflow==2.2.5
$ sudo pip3 install apache-airflow-providers-postgres==2.2.0
$ sudo pip3 install apache-airflow-providers-mysql==2.2.0
$ sudo pip3 install apache-airflow-providers-amazon==2.3.0
$ sudo pip3 install apache.airflow.providers.slack
$ sudo pip3 install apache.airflow.providers.google
$ sudo pip3 install SQLAlchemy==1.3.23
$ sudo pip3 install oauth2client
$ sudo pip3 install gspread
$ sudo pip3 install typing_extensions

 

airflow 계정 생성

이전 포스팅 중 Rocky Linux 테스트 서버를 만드는 포스팅을 참고해보면 알겠지만 AWS 인스턴스는 처음 생성 시 OS의 이름으로 계정을 생성해준다. 그래서 rocky라는 계정으로 현재 실습이 진행중이지만 보안을 위해서는 별도의 계정을 만들어 해당 계정에 Airflow를 설치하고 관리하는 것이 좋다. 따라서 아래 명령어를 통해 airflow 계정을 만든다.

$ sudo groupadd airflow
$ sudo useradd -s /bin/bash airflow -g airflow -d /var/lib/airflow -m

일반적으로는 /home/airflow 와 같은 경로로 home 디렉토리를 지정하지만 스터디 때 처럼 /var/lib/airflow 경로로 홈 디렉토리를 지정했다.

 

Postgresql 설치

아래 명령어를 통해 Postgresql 10 버전을 설치한다. 시스템 데몬으로 등록해서 인스턴스가 재부팅 되어도 자동으로 실행되게 설정까지 하는 과정을 포함했다. (참고로 airflow 계정이 아닌 rocky 계정으로 진행해야 한다.)

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo dnf -qy module disable postgresql
$ sudo dnf install -y postgresql10-server postgresql10-contrib postgresql10-docs
$ sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
$ sudo systemctl --now enable postgresql-10
$ sudo systemctl status postgresql-10

Airflow가 Postgresql을 접속할 때 사용할 계정을 생성한다. (Postgresql shell로 접속)

$ sudo su postgres
$ psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# CREATE USER airflow PASSWORD 'airflow';
CREATE ROLE
postgres=# CREATE DATABASE airflow;
CREATE DATABASE
postgres=# \q
$ exit

편의를 위해 Postgresql 외부접속 허용하는 설정을 한다. 아래 부분을 찾아서 수정한다. (postgres 계정에서 실행해야 한다.)

  • postgresql.conf 파일 수정
  • pg_hba.conf 파일 수정 - method의 ident부분을 md5로 바꾸는게 중요!
$ sudo su postgres
$ vi /var/lib/pgsql/10/data/postgresql.conf
listen_addresses = '*'          # what IP address(es) to listen on;

$ vi /var/lib/pgsql/10/data/pg_hba.conf
# IPv4 local connections:
host    all             all             0.0.0.0/0               md5

/var/lib/pgsql/10/data/pg_hba.conf

$ exit

Postgresql 서비스를 재실행한다. (rocky 계정에서 실행해야 한다.)

$ sudo systemctl restart postgresql-10 
$ sudo systemctl status postgresql-10

 

Airflow 초기화

Airflow 기본환경을 세팅한다. (airflow 계정에서 실행해야 한다.)

$ sudo su - airflow
$ mkdir dags
$ AIRFLOW_HOME=/var/lib/airflow airflow db init
$ ls /var/lib/airflow
airflow.cfg  airflow.db  dags  logs  webserver_config.py

Airflow 환경파일(/var/lib/airflow/airflow.cfg)을 편집하여 4가지를 수정한다.

  • “executor”를 SequentialExecutor에서 LocalExecutor로 수정
  • DB 연결스트링(”sql_alchemy_conn”)을 앞서 설치한 Postgres로 수정
  • “load_examples” 설정을 False로 수정
  • timezone을 서울시간으로 변경
    • default_ui_timezone 값을 Asia/Seoul로 수정 (Web UI의 시간대)
    • default_timezone 값을 Asia/Seoul로 수정 (스케줄러의 시간대)
$ mv airflow.cfg airflow.cfg.bak
$ vi airflow.cfg
[core]
executor = LocalExecutor
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow
load_examples = False
default_ui_timezone = Asia/Seoul
default_timezone = Asia/Seoul

airflow.cfg의 설정 정보가 반영되도록 Airflow를 다시 설정한다.

$ AIRFLOW_HOME=/var/lib/airflow airflow db init

 

Airflow 실행 및 서비스 등록

Airflow 웹서버와 스케줄러를 각각 서비스로 등록한다.

$ sudo vi /etc/systemd/system/airflow-webserver.service

[Unit]
Description=Airflow webserver
After=network.target

[Service]
Environment=AIRFLOW_HOME=/var/lib/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow webserver -p 8080
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target
$ sudo vi /etc/systemd/system/airflow-scheduler.service

[Unit]
Description=Airflow scheduler
After=network.target

[Service]
Environment=AIRFLOW_HOME=/var/lib/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow scheduler
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl --now enable airflow-webserver
$ sudo systemctl --now enable airflow-scheduler

 

Airflow 로그인 어카운트 생성

airflow 계정에서 아래 명령어를 실행한다.

$ AIRFLOW_HOME=/var/lib/airflow airflow users  create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin1234

 

인터넷 브라우저를 실행하고 "본인IP:8080"를 입력해 Airflow 웹에 접속한다.
로그인은 바로 위에서 만든 계정으로 접속하면 된다.

 

위와 같이 잘 접속되면 잘 설치가 된 것이다.

 

마무리

이번 포스팅에서는 Rocky Linux에 Airflow를 설치해 보았다. Airflow 설치를 위해 Python 3.8 버전과 Airflow의 메타데이터 관리를 위해 Postgresql 설치도 함께 진행했다. 개인적으로 Postgresql을 많이 사용해보지 않아 설치할 때 애를 좀 먹기도 했다. Airflow를 설치했으니 이제 본격적으로 데이터 파이프라인을 만드는 작업을 진행하면 되겠다. 이 과정들은 향후 포스팅에서 다뤄보겠다.

 

참고자료

관련글 더보기

댓글 영역