Airflow는 Linux에서만 구동이 가능하다.
(물론 Windows도 몇몇 설정을 진행하면 가능한데, 매끄럽지 않다.)
Docker 공식 문서 기반으로 정리
새 호스트 머신에
처음으로 Docker 엔진을 설치하기 전에 Docker 저장소를 설정해야 한다.
# Docker 공식 GPG key를 추가한다.:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Apt 소스를 레포지토리에 추가한다.:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt 저장소 업데이트 한다.
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
쉽게 말해,
여러 개의 컨테이너를 실행하기 위함
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.8.1/docker-compose.yaml'
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env
dags, logs, plugins, config를 위한 디렉터리 생성
- dags
- Airflow DAG 파일들을 저장하는 디렉토리입니다.
- DAG는 Airflow에서 작업 스케줄링을 정의하는 Python 스크립트입니다.
- logs
- Airflow 작업 실행 로그를 저장하는 디렉토리입니다.
- plugins
- Airflow 플러그인 모듈을 저장하는 디렉토리입니다. 플러그인은 Airflow의 기능을 확장하거나 사용자 정의 연산자를 추가하는 데 사용됩니다.
- config
- Airflow 구성 파일을 저장하는 디렉토리입니다.
Airflow 사용자에게 권한 부여
- Airflow를 실행하는 사용자의 ID를 설정하는 것은 파일 및 디렉토리의 소유권과 권한 관리를 용이하게 만들어 줍니다.
sudo docker compose up airflow-init
이후, 머신에서 주소 창에
localhost:8080
입력 시,
접속할 수 있다.
Airflow는 Python 기반이므로 Code작성이 불가피하다.
따라서,
VI나 IDE를 통해 Code를 작성하는데, 서버 컴퓨터에서 작업은
(자원이 넘쳐서 할 수도 있지만 미친놈이 아닌 이상)하지 않으므로
Git을 통해 개발환경을 설정한다.
Local 환경에서 만든 dag를 컨테이너까지 배포하는 것이 목표이다.
Airflow를 실행하는 컨테이너의 Python 버전과 동일해야 한다.
# Airflow가 실행중이라고 가정하며,
sudo docker ps
# 컨테이너 내부로 진입하기
sudo docker exec -it {IMAGE 이름} bash
# python 버전 확인
python -V
Local에서 동일한 버전의 Python 설치
Python 다운로드 링크
# git 설치 후 동작하는지 cmd에서 확인
git
# airflow 폴더 디렉터리에 접근 후,
git init
git add .
git commit -m "first commit"
로컬 Git 저장소와 Github Remote를 연결
git remote add origin https://github.com/~~~