3. airflow-day2-3

김종욱·2023년 6월 8일
0

학습주제
airflow ec2 설치

학습내용
ec2 인스턴스를 사용해서 에어플로우를 설치해본다
https://github.com/keeyong/airflow-setup/blob/main/docs/Airflow%202%20Installation.md
ec2 서비스 이동


우분투 20.04 선택

프리티어 가능함.


t3.small

키페어 생성

윈도 10이므로 pem
이전버전은 ppk

파일이 저장됨. 나중에 사용 예정

내 퍼블릭 키는
해당 서버에 설치됨

보안그룹을 생성
포트넘버 24, 8080이 열려야 함.
ssh 트래픽은 모든 허용

디스크는 8GB



인스턴스 ID로 이동해서


우측 퍼블릭 IPv4 DNS 복사

터미널을 열고, 터미널에서 ssh 커맨드, pem 을가지고
우분투 계정을 가지고 로그인 할 예정.

깃헙 리포에서
설치명령이 어디있는지 확인
https://github.com/keeyong/airflow-setup/blob/main/docs/Airflow%202%20Installation.md

하나씩 복사해서 실행해볼 예정.
비디오, 문서를 참고해 직접 설치해보면 된다.
도커가 돌아가는 환경이라면
도커로 돌리는게 좋음.

터미널로 넘어가
저번에 aws 서버 접속했던 .shh 폴더에 pem 키를 넣어놓는다.

ssh -i airflow-dev.pem ubuntu@ec2-54-180-96-228.ap-northeast-2.compute.amazonaws.com

우분투 유저(기본생성)을 사용해서 aws ec2 서버에 키를 이용해 접속
처음 연결이라 yes 눌러주고

로그인이 된 상태.
에러가 날 수도 있음.
exit를 한 뒤

ls -tl airflow-dev.pem
을 하면

-rw-r--r--는 파일의 퍼미션을 나타냅니다. 여기서 "rw"는 소유자(파일 생성자)가 파일을 읽고 쓸 수 있음을 의미하고, 그 다음 두 개의 "r"는 그룹과 다른 사용자가 파일을 읽을 수 있음을 의미합니다

라고 한다 예전에 했던 것처럼 chmod로 권한을 줄이는 작업을 한다. (안그럼 에러남)
chmod 600 airflow-dev.pem
별다른 메세지가 안뜬다. 성공

권한은 나에게만 주게 설정함.

일단 보이기엔 윈도우 환경이라 chmod 상관 없이 접속되는 것으로 보임.

지금 패키지의 정보가 최신이 아님. 업데이트를 위해
sudo apt-get update

파이썬 3을 사용
이번의 우분투에서 제대로 세팅되어 있지 않음
pip을 업데이트 해야함
wget https://bootstrap.pypa.io/get-pip.py
을 받아서

sudo python3 get-pip.py
파이썬3로 pip를 실행시킴

pip 패키지를 업그레이드함

sudo apt-get install -y python3-pip
을 받아서

sudo pip3 install pyopenssl --upgrade

정확히 이해 못해도 된다. 하다보면 이해되는 순간이 온다.

에어플로우를 설치할 수 있는 파이썬 환경을 구성하였다.
이제 파이선 모듈, 에어플로우 모듈 설치할 수 있음
그전에
ssl 버전이 낮기 때문에 업그레이드 했다.

에어플로우 설치

mysql 관련 모듈 설치
파이썬 모듈 X, 우분투 모듈
나중에 에어플로우 DAG 실행시키려면 mysql 모듈들이 설치되어 있어야 함
설치에 상당한 시간이 걸린다
sudo apt-get install -y libmysqlclient-dev

에어플로우를 설치한다
sudo pip3 install --ignore-installed "apache-airflow[celery,amazon,mysql,postgres]==2.5.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.5.1/constraints-3.7.txt"
버전 조건을 걸어서 설치하는 것 같다.
에어플로우 관련 모듈을 한번에 설치한다.

버전을 2.5.1을 줌. 저 버전부분을 수정하면 된다.

에어플로우, 관련 모듈이 모두 설치됨. 시간이 걸림.
이후 넘파이, 판다스를 설치해볼 예정

sudo pip3 install oauth2client gspread numpy pandas

에러, 워닝이 뜨는데 무시.

우분투환경, 파이썬 환경 준비 완료.
이제 환경 설정 시작.

우분투라는 슈퍼 유저로 로그인 한 상태
우분투 계정에 직접 설치는 비추천
그룹과 유저를 생성.
sudo groupadd airflow
에어플로우라는 그룹을 만들고

sudo useradd -s /bin/bash airflow -g airflow -d /var/lib/airflow -m
airflow라는 계정을 만들면서, 홈 디렉토리를 airflow 폴더를 줌
앞에 에어플로우 그룹 밑에 속한다.

기본으로 설치되는 메타데이터 DB sqlite인데 postgres로 바꿀 예정
postgres 관련 모듈 설치

설치되고나면
postgres 계정이 리눅스에 만들어짐
지금까지 총 3개의 계정이 만들어짐
기본으로 주어지는 ubuntu
아까 만든 airflow
좀전에 설치로 만든 postgres

우분투에서 postgres로 변신
sudo su postgres

이 사용자는 postgres DB에 엑세스가 있음
psql
포스트그라스 클라이언트 프로그램
데이터 베이스, 사용자 등을 만듦
CREATE USER airflow PASSWORD 'airflow';로 계정생성

에어플로가 사용할 전용 DB를 만들어줌
CREATE DATABASE airflow;

DB USER도 만듦
\q로 psql에서 나옴
exit로 postgres에서 나옴

다시 우분투로 돌아옴
postgres를 재시작함
sudo service postgresql restart
에어플로우도 service 명령어로 많이 사용 예정

다음으로 에어플로 유저로 변신, 에어플로 설치
sudo su airflow

홈 디렉토리로 이동해야함
cd ~/

대그들이 모일 dags 폴더 생성
mkdir dags

아까 세팅했던 환경에 맞추어 에어플로우가 메타데이터 DB를 쓰게 해줘야함
처음엔 sqlite 쓰게함. db init으로 DB를 초기화함

AIRFLOW_HOME=/var/lib/airflow airflow db init

아직은 아무것도 없는데 초기화를 하면 airflow.cfg라는 환경파일이 생김
postgres를 사용하게 바꿔볼 것임
현재 HOME에 환경변수를 위치를 지정해줌 나중에 배쉬 프로파일에 옮길 예정.
파일 목록을 보면
ls -tl

airflow.db라고 sqllite 파일이 생김
처음엔 이걸 메타데이터 저장소로 사용
에어플로.cfg를 편집해 메타데이터 위치 변경, 엑시큐터를 로컬 엑시큐터로 변경
vi 커맨드
vi airflow.cfg

core에 보면
dags_folder위 위치가 dags로 되어 있다.
아까 폴더를 만든 이유도 저 위치를 맞추기 위함.


이건 sqlite를 쓸때만 Local로 바꿈 mysql, postgres 쓸 때 사용
에어플로 스케줄러. 대그를 정해진 시간에 맞춰 실행. 엑시큐터 통해 실행.
엑시큐터가 뭐냐에 따라 워커에 넘겨주는 방법이 다름
여러 엑시큐터가 있음.
쭉 내려가면
예제 대그들이 True로 있음
frenet_key에 어떤 값이 있으면 그 키를 가지고 메타데이터 DB를 암호화 함
검색모드로 들어가기 위해
/database 검색
여기서 다음을 검색하려면 n을 누르면됨

sqlite으로 되어 있는데,
로컬에 설치한 postgres의 airflow 계정과 airflow DB로 사용하게 한다

라인삭제는 dd

메타데이터는 postgres를 엑세스 하겠다는 것 id,pw airflow
데이터베이스 이름 airflow

파일을 저장하기 위해
:wq!

db커넥션 부분이 달라졌기 때문에
db init을 다시 해줘야함

뭔가 에러가 났다
비밀번호 인증에 실패했다고 한다
postgres 계정으로 들어가
다시 유저와 비밀번호, 그리고 데이터 베이스를 만들었다

다시 db init을 시켜주니 정상적으로 되었다.
유저, 데이터베이스가 생성이 안되어 발생한 문제같은데, 왜 생성이 안됐지;;

에어플로우가 서비스로 백그라운드에서 돌수 있도록 로그아웃해도 돌아가고 리부팅을 해도 자동으로 돌아가게함
이건 슈퍼유저만 할 수 있음
exit을 해서 슈퍼유저로 돌아간다

웹서버와, 스케줄러를 각각 서비스로 등록해야하기 때문에
다음과 같은 파일을 만들고
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

에딧모드에서 붙여넣기

스케줄러에 동일 작업 수행

깃헙 리포에서 해당 내용을 복사해서 붙여넣기

서비스를 기술해주는 두개의 파일을 만들었음.
이걸 기반으로 서비스를 활성화

리포에 가면 명령어 3개
3개 각각실행

실행이 잘 됐는지 보기위해
sudo systemctl status airflow-webserver

죽어있음. q를 눌러서 나온다

서비스를 활성화만하고 시작을 하지 않음
sudo systemctl start airflow-webserver
sudo systemctl start airflow-scheduler

갑자기 확인하는 과정에서 먹통이 됨. ctrl z, c 다 안됨.
종료하고 다시 ssh 통해서 ubuntu 접속 시도

와이파이가 불안정해서 생긴 이슈였음

왜인지 모르겠지만 계속 안되어, 개인 방화벽 설정이 문제인거 같아 인바운드 규칙에 22번 포트를 추가하니 해결됨



두 서비스 모두 정상적으로 작동하는 것 확인

enable - start - status 순으로 확인하면 된다.

웹서버 로그인 필요 어카운트를 생성해본다
에어플로우에도 웹 서버 접속을 위한 자체 어카운트가 있음
기본으로는 admin:admin4321으로 주려 함. 깃헙에 있음

sudo su airflow
AIRFLOW_HOME=/var/lib/airflow airflow users  create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin4321

두번째 명령어를 실행했는데 반응이 없음
슈퍼유저에서 계정 생성하지 않게 주의

다시 프로세스 중지 시키고, ctrl z, 기다려본다

한참있으니까 뜨긴 뜸.
확인해본다
한줄 더떠야함.

왜이렇게 오래걸리지..
일단 수업 먼저 듣고 다시 시도해본다.

한 10분 넘게 걸린거 같다. 그래도 되어서 다행이다.

dags 폴더에 bash 오퍼레이터 코드 세팅
깃헙 리포를 클론해온다

sudo su airflow
cd ~/
git clone https://github.com/keeyong/airflow-setup.git
cp -r airflow-setup/dags/* dags

리포가 카피되면 에어플로우 내용을 dags으로 복사함

테스트 태그를 보면

파일 세개를 카피했고, 각각이 하나의 파이프라인
예제 외에도
새로운 세개의 대그가 있음
history를 보면 커맨드들을 볼 수 있음
보면 환경변수를 매번 셋업을 해줬었음
에어플로우가 사용하는 쉘 스크립트는 배쉬 쉘 스크립트임
사용자가 바뀔 때 자동으로 실행해주고 싶은 설정들이 있는 경우
홈디렉토리 밑에 .bashrc에 기록할 수 있음
에어플로우 유저로 로그인할 때 자동으로 실행되는 코드
vi 커맨드로 들어간 뒤 G를 누르면 파일의 맨 끝으로 감

마지막에 i 눌러 편집모드
깃헙에 명령어 세줄이 있는데 복붙함

AIRFLOW_HOME=/var/lib/airflow
export AIRFLOW_HOME
cd ~/

저장해서 나가준다


띄어쓰기가 문제인가 에러난다


첫번째 줄을 잘못건드린거 같다
수정함
된거 같음
홈디렉토리가 디폴트로 된걸로 보아 성공
export 명령어 실행

환경 변수가 실행된 것을 볼 수 있음

에어플로우를 ec2 위에 설정 데모 완료함
웹 UI로접근해본다

이 서버를 가지고 8080 포트로 접근해본다
엑세스가 바로 안됨.
ec2 서버 론치할때 보안그룹에서 8080포트가 오픈이 안되있기 때문
현재 포트넘버 22만 열러있음
인바운드 규칙으로 가 사용자 지정 TCP, 8080포트, 모든 아이피.

현재 웹사이트 접속이 되지 않음.
에어플로우 서버가 동작하는지 확인하라고 한다.
포트는 열어놔서 접속은 되는데 서버가 작동을 안하는 경우.
예상은 아까, 관련 모듈 설치할때 잘 안한거 같음. 다시 설치해본다

인스턴스 재부팅하니 다시 거절 오류남

https://developer-ping9.tistory.com/316이걸 시도함

중지 중
퍼블릭 DNS가 변경됨

뭔가 여전히 느린 느낌

속도가 완전 똥이라, 다시 설치해본다
vpc부터 새로 깔아서 생성 시도함


3개의 태스크
활성화를 시켜와 실행이 됨
auto refresh 하면 한번 실행이 됨

요약

VPC 문제인지 모르겠는데 상당히 느리다. 다시 한번 해봐야함
지금은 수업이 급해서 수업부터 밀어야 한다

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글