Airflow๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
โ . Airflow๋ฅผ ์ด์ํ๋ ๋ฐฉ๋ฒ
1. ์ง์ ์ค์น+์ด์
1) Docker ์ด๋ฏธ์ง๋ก Airflow ์ฌ์ฉ (GCP)
2) ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ฆฌ๋
์ค ์๋ฒ์ ์ง์ ์ค์น (AWS)
2. ํด๋ผ์ฐ๋ ์๋น์ค์ ์ค์นํด์ ์ฌ์ฉ
1) AWS
MWAA
2) GCS(Google Cloud Storage)
Clout compozer
3) MS Azure
Azure Data factory์ Airflow DAG ์ด์ฉ
ํด๋น ๊ธ์์๋ ์ง์ ์ค์น+์ด์ํ๋ ๋ฐฉ๋ฒ์ ์ค์ตํด ๋ณธ๋ค.
โ ก. Airflow ์ง์ ์ค์นํ๊ณ ์ด์ํ๊ธฐ ์ค์ต
1. Docker ์ด๋ฏธ์ง๋ก Airflow ์ฌ์ฉ
์ปดํจํฐ์ ์ง์ ์ค์นํด๋ ๋์ง๋ง, ๋์ปค๋ฅผ ๋ก์ปฌ ์ปดํจํฐ์ ๋๋ฆฌ๋ฉด ์ปดํจํฐ๊ฐ ๋๋ฌด ๋๋ ค์ง๋ค.
๊ทธ๋์ ์ด์์ด๋ฉด ํด๋ผ์ฐ๋ ์๋น์ค์ ์๋ฒ์ Docker๋ฅผ ์ค์นํ๊ณ Airflow๋ฅผ ๋์ปค ์ด๋ฏธ์ง๋ก ๋ค์ด๋ก๋ํ์ฌ ๋ณด์.
์ฌ๊ธฐ์๋ GCS์ compute machine์ ์ฌ์ฉํ๋ค.
(AWS GCS ๋ชจ๋ ์ต์ํ๊ฒ ๋ค๋ค๋ณด์)
1) VM ์ธ์คํด์ค ์์ฑ
์์ธ ์ง์ญ์ n1์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฌด๋ฃ ํฌ๋ ๋ง์ ์ด์ฉํ ๊ฒ์ด๋ค.
๋จธ์ ์ ํ์ Custom์ ์ ํํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ง์ ํ์๋ค.(vCPU : 4, Memory : 8 )
๋ถํ
๋์คํฌ๋ Ubuntu-20.04๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐฉํ๋ฒฝ์ HTTP, HTTPS ํธ๋ํฝ์ ๋ชจ๋ ํ์ฉํ์๋ค.
2) ์๋ฒ์ Docker ์ค์น
๋ฐฉ๊ธ ์์ฑํ ์ธ์คํด์ค์ SSH๋ฒํผ์ ๋๋ฅด๋ฉด ๋ธ๋ผ์ฐ์ ์์ ssh๋ฅผ ํตํด ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์๋ค.
โ ์์คํ
์ ํจํค์ง ๋ชฉ๋ก์ ์ต์ ์ํ๋ก ์
๋ฐ์ดํธ
โก Docker๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ค์นํ๊ธฐ ์ํด ํ์ํ ์ถ๊ฐ์ ์ธ ํจํค์ง๋ฅผ ์ค์น(apt-transport-https, ca-certificates, curl, software-properties-common)
โข Docker์ ๊ณต์ GPG ํค๋ฅผ ๋ค์ด๋ก๋ํ์ฌ APT ํจํค์ง ๊ด๋ฆฌ์์ ์ถ๊ฐ
โฃ Docker ํจํค์ง๋ฅผ ์ ๊ณตํ๋ ์ ์ฅ์๋ฅผ ์์คํ
์ ์ถ๊ฐ
โค ์๋ก ์ถ๊ฐ๋ Docker ์ ์ฅ์ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ํจํค์ง ๋ชฉ๋ก์ ์
๋ฐ์ดํธ
โฅ ์ค์น ๊ฐ๋ฅํ Docker ๋ฒ์ ์ ๋ชฉ๋ก์ ํ์ โฆ ์์ ์ค์ ํ ์ ์ฅ์๋ฅผ ํตํด Docker Community Edition (CE)๋ฅผ ์ค์น + Docker ์์ง ํ์ฑํ
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
3) ์๋ฒ์ Docker-compose ์ค์น
โ Docker compose ํจํค์ง ๋ค์ด๋ก๋ (2 ๋ฒ์ ์ด์์ ๋ค์ด๋ก๋ํ์. 1 ๋ฒ์ ์ ์ค๋ฅ๊ฐ ๋ง์ด ๋๋ค)
โก ๋ค์ด๋ก๋ํ Docker Compose ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์คํ ๊ถํ์ ๋ถ์ฌ
โข ํ์ฌ ์ฌ์ฉ์๋ฅผ Docker ๊ทธ๋ฃน์ ์ถ๊ฐ
sudo curl -L https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo usermod -aG docker $USER
4) uid, gid ํ๊ฒฝ๋ณ์๋ก ์ค์
์ฌ์ฉ์ ์์ด๋, ๊ทธ๋ฃน ์์ด๋๋ก ( /etc/passwd, /etc/group) ํ์ผ์์ ๊ด๋ จ ์ ๋ณด๋ค์ ํ์ธํ ์ ์๊ณ
ํ์ฌ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ id -u ๋ช
๋ น์ด๋ก ๊ทธ๋ฃน์ ๋ํ ์ ๋ณด๋ id -g ๋ช
๋ น์ด๋ก ์ ์ ์๋ค.
export AIRFLOW_UID=$(id -u)
export AIRFLOW_GID=$(id -g)
6) Docker image๋ก ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ
๋์ปค ์ด๋ฏธ์ง๊ฐ ์๋ ๊นํ๋ธ ๋ ํฌ์งํ ๋ฆฌ ํด๋ก
git clone https://github.com/keeyong/airflow-setup.git
Apache Airflow์ Docker Compose ์ค์ ํ์ผ์ ๋ค์ด๋ก๋
airflow-setup ํด๋๋ก ์ด๋ํ ๋ค, Docker compose ์ค์ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ค.
cd airflow-setup
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
yaml ํ์ผ ์์
์ค๋ฅ1
*** Log file does not exist: /opt/airflow/logs/~
*** Fetching from: http://:8793/log/dag_id=~
*** Failed to fetch log file from worker. Request URL is missing an 'http://' or 'https://' protocol.
docker์์ DAG๋ฅผ ์คํ์ํค๋ฉด ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์์ธ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง,
yamlํ์ผ ์ผ๋ถ ๋ณ๊ฒฝ ๋ฐ airflow-scheduler ์ปจํ
์ด๋์์ ๋ก๊ทธ ํด๋์ ๊ถํ์ ๋ถ์ฌํ๋ฉด ํด๊ฒฐ๋๋ ๋ฌธ์ ์ด๋ค.
- docker/airflow-setup/docker-compose.yaml ํ์ผ ์ผ๋ถ ๋ณ๊ฒฝ
๋ค์์ ํ๊ฒฝ๋ณ์์ ์ค์นํ ๋ชจ๋์ ์ ๋๋ค.(์ค์ต์ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ชจ๋์ ์ ๋ณด์ด๋ค.) ํด๋น ํ๊ฒฝ๋ณ์๋ Python ํจํค์ง ๊ด๋ฆฌ์์ธ pip๋ฅผ ํตํด ์ถ๊ฐ์ ์ธ ํจํค์ง ์๊ตฌ ์ฌํญ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ์๋์ผ๋ก ์ถ๊ฐ์ ์ธ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค.
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- yfinance pandas numpy oauth2client gspread pymysql}
์ค๋ฅ
Got permission denied while trying to connect to the Docker daemon socke
๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ผ๋ฉด ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
์์ธ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง, Docker์ Docker Compose๋ฅผ ์ฌ์ฉํ๋๋ฐ ํ์ํ ๊ถํ์ด ๋ถ์ฌ๋์ง ์์ ๊ฒ์ผ ์๋ ์๋ค.
1. Docker ๊ทธ๋ฃน์ ์ฌ์ฉ์ ์ถ๊ฐ:
sudo usermod -aG docker $USER
2. Docker ๋ฐ๋ชฌ ์์ผ ์์ ๊ถ ๋ณ๊ฒฝํ ์์คํ ์ฌ์์
sudo chown :docker /var/run/docker.sock
sudo reboot
๋์ปค ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ๋ฐ ์ปจํ ์ด๋ ์คํ
๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ๋ค, ์ปจํ ์ด๋ ์์ ์คํ์ํจ๋ค.
docker-compose -f docker-compose.yaml pull
docker-compose -f docker-compose.yaml up -d
- -d์ต์
detach๋ชจ๋๋ก ์คํํ๋ ๊ฒ์ผ๋ก ์ปจํ
์ด๋๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ฉฐ ํฐ๋ฏธ๋๊ณผ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ค.
์ปจํ
์ด๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๊ณ ํฐ๋ฏธ๋์ ๋ค๋ฅธ ๋ช
๋ น์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ช
๋ น์ด ์ต์
์ด๋ค.
- airflow-scheduler ์ปจํ
์ด๋์์ ๋ก๊ทธ ํด๋์ ๊ถํ์ ๋ถ์ฌ
โ airflow-scheduler์ CONTAINER ID ์์๋ด๊ธฐ
docker ps
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ airflow-scheduler์ CONTAINER ID ์ ๋ณด๋ฅผ ํ๋ํ๋ค.
โก Root ์ฌ์ฉ์๋ก ์ปจํ
์ด๋ ์ ์ํ๊ธฐ
docker exec -u root -it CONTAINER ID sh
โข ๋ก๊ทธ ํด๋์ ๊ถํ ๋ถ์ฌํ๊ธฐ
sudo chmod -R 777 /opt/airflow/logs
7) airflow ์ด๊ธฐ ์ค์ ํ๊ธฐ
docker-scheduler์ ๋ก๊ทธ์ธํด์ airflow.cfg ํ์ผ์ ๋ ๊ฐ์ง ๋ณ์๊ฐ์ ๋ณ๊ฒฝํ๋ค.
docker exec -it CONTAINER ID sh
vim airflow.cfg
โ [core] executor = LocalExecutor
โก [database] sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow
์ดํ์ ์ฌ์์ํ๋ค
docker-compose restart
8) ์น UI ๋ก๊ทธ์ธํ๊ธฐ
GCP์ ์ธ๋ถ ip์ฃผ์๋ฅผ ๊ณ ์
์ธ๋ถ ip์ฃผ์> ์ธ๋ถ ์ฃผ์ ์์ฝ์์ ์ธ๋ถ์ฃผ์๋ฅผ ๊ณ ์ ip์ฃผ์๋ก ๋ณ๊ฒฝํ๋ค.
๋ฐฉํ๋ฒฝ ์ค์ ๋ณ๊ฒฝ
VPC๋คํธ์ํฌ > ๋ฐฉํ๋ฒฝ ๊ท์น > ๋ฐฉํ๋ฒฝ ๊ท์น ๋ง๋ค๊ธฐ ์์ 8080 ํฌํธ์ ๋ํ ์ ์์ ํ๊ฐํ๋ค.
๊ท์น๋ด์ฉ
- ๋์ : ๋คํธ์ํฌ์ ๋ชจ๋ ์ธ์คํด์ค
- ์์คํํฐ : IPV4 ๋ฒ์
- ์์ค IPV4 ๋ฒ์ : 0.0.0.0/0
- ํ๋กํ ์ฝ ๋ฐ ํฌํธ : tcp - 8080
๊ณ ์ ip ์ฃผ์ ์ด์ฉํด airflow UI ์ ์
๋ค์์ ๊ณ ์ ip ์ฃผ์๋ฅผ ์ด์ฉํด airflow์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ํ ํ๋ฉด์ด๋ค.
์ฐธ๊ณ )
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
docs.docker.com
2. AWS ๋ฆฌ๋ ์ค ์๋ฒ์ airflow ์ง์ ์ค์นํ๊ธฐ
์ฌ๊ธฐ์๋ AWS ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ์ด์ฉํ๋ค.
1) EC2 ์๋ฒ ๋ง๋ค๊ธฐ
Application and OS Images (Amazon Machine Image)
Ubuntu-20.04 ์ฌ์ฉ
์ธ์คํด์ค ์ ํ
t3.small ์ ํ
ํค ํ์ด
window 10 ์ด์๋ถํฐ๋. pemํ์ผ์ ์ง์ํ๋ค.
๋คํธ์ํฌ ์ค์
2) ์ ์ํ๊ธฐ
ํ์ผ ๊ถํ ์์
ํ์ผ ๊ถํ์ ์์ ํ์ง ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Permissions for 'airflow-dev.pem' are too open.
๋ค์ ๊ธ์ ๋ฐ๋ผ ๊ถํ์ ์์ ํ๋๋ก ํ๋ค.
์๋์ฐ ssh ์ฐ๊ฒฐ ์๋ฌ(permissions ... too open๋ฑ)
๋ชฉ์ฐจ ๋ฆฌ๋ ์ค์ ๊ฒฝ์ฐ pem ํ์ผ์ chmod 400 "ํ์ผ๋ช " ํด์ฃผ๋ฉด ๋ฉ๋๋ค. Permissions... too open ์๋ฌ Permissions for '.pem' are too open It is required that your private key files are NOT accessible by others. This private key will be ignored
rainbound.tistory.com
2)-1. [pemํ์ผ ์์ฑ]-[๋ณด์]-[๊ณ ๊ธ]-[์์์ฌ์ฉ์ํจ]-[์ด ๊ฐ์ฒด์์ ์์๋ ์ฌ์ฉ ๊ถํ์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค]-[์ ์ฉ]-[ํ์ธ]
2)-2. ๋๋ cmd์์ ์ง์ '๋'์๊ฒ๋ง r, w๊ถํ์ ๋ถ์ฌํ๋ค.
[cmd]
cd pemํ์ผ์ด ์๋ ํด๋
icacls ํค์ด๋ฆ.pem /inheritance:r /grant:r "%USERNAME%:RW"
3) EC2 ์๋ฒ์ airflow ์ค์น
ssh -i "ํค์ด๋ฆ.pem" ubuntu@ํผ๋ธ๋ฆญ IPv4 DNS ์ฃผ์
๊ทธ ์ดํ์ ๋ค์ ๊นํ๋ธ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ๊ฐ์
https://github.com/keeyong/airflow-setup/blob/main/docs/Airflow%202%20Installation.md
(๊ฐ๋จํ ์ค๋ช ์ ํ์๋ฉด)
๊ณ์ ๋ช | ubuntu | airflow | postgresql |
4) Ubuntu ์ต์ ์ํ๋ก ์
๋ฐ์ดํธ, python3 ์ค์น, python-openssel ์
๋ฐ์ดํธ
|
11) ๊ณ์ ์ ํ
|
8) ๊ณ์ ์ ํ
|
10) ๋ฒ ๊ณผ์
- "executor" : SequentialExecutor → LocalExecutor๋ก ์์ (sqlite๋ฅผ ๊ธฐ๋ณธ DB๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ SequentialExecutor์ ์ฌ์ฉํ ์ ์๋ค.)
- "sql_alchemy_conn" : sqlite → postgres๋ก ๋ฐ๊พผ๋ค
postgresql+psycopg2://์๋ก์ด์ฌ์ฉ์:์๋ก์ด๋น๋ฐ๋ฒํธ@์๋ก์ดํธ์คํธ:์๋ก์ดํฌํธ/์๋ก์ด๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฆ
ํฌํธ๋ฒํธ๋ ์ฌ์ฉํ๋ DB ์ข ๋ฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค(mysql : 3306, postgresql : 5432)
postgresql+psycogs2://airflow:airflow@localhost:5432/airflow
10) ๋ฒ์ ์ํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ๋ณผ ์ ์๋ค.
13๋ฒ ๊ณผ์ )
github ํด๋ก ํ์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ airflow-setupํด๋/dagsํด๋/์์ ๋ชจ๋ ํ์ผ์ dags ํด๋๋ก ๋ณต์ฌ
git clone https://github.com/keeyong/airflow-setup.git
cp -r airflow-setup/dags/* dags
๋ณต์ฌ๋ dag ํ์ผ์ ํ์ธํด ๋ณด์.
14๋ฒ ๊ณผ์ )
๋ค์๊ณผ ๊ฐ์ด airflow๊ณ์ ์ ๊ธฐ๋ณธ ํ ๋๋ ํฐ๋ฆฌ๊ฐ ์ค์ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
20) ์น์์ EC2 ์๋ฒ์ ์ ์
ํด๋น ์ธ์คํด์ค์ ๋ณด์๊ทธ๋ฃน์์ ์ธ๋ฐ์ด๋ ๊ท์น ์ถ๊ฐ๋ก ํฌํธ๋ฅผ ์ฐ๋ค(8080)
EC2์ธ์คํด์ค-๋ณด์-์ธ๋ฐ์ด๋ ๊ท์น-๋ณด์๊ทธ๋ฃน ํด๋ฆญ
ํด๋น ๋ณด์๊ทธ๋ฃน์ ์ ํํ๊ณ ์ธ๋ฐ์ด๋ ๊ท์น-์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง-๊ท์น์ถ๊ฐ
๋ค์์ ํฌํธ๋ฅผ ์ถ๊ฐํ๋ค.
์ด์ ํด๋น https://EC2 DNS์ฃผ์:8080์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ํ ์ ์๋ค.
ํ์ธํด ๋ณด๋ฉด ์๊น ๊นํ๋ธ์์ ๋ณต์ฌํ ์ธ ๊ฐ์ง dag ๋ชฉ๋ก์ด๋ค.(๋๋จธ์ง๋ airflow๊ฐ ๋ก๋ฉํด ์ฃผ๋ ์์ ์ด๋ค)
Dag์ ์ ์ํด์ ํ์ธํด ๋ณด๋ฉด, task์ ๊ฐ์์ ํ์ฑํ๋ฅผ ์ํฌ ์ ์๋ค.
2๊ฐ์ task๋ก ๊ตฌ์ฑ
ํ์ฑํ ๋ฒํผ
์ด๋ฒ ์๊ฐ์ airflow๋ฅผ ์ง์ ์ค์นํ๊ณ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์ธ ์ ์์๋ค.
๊ฐ์ ๋ด์ฉ์ ํ ๋ฒ์ ์ดํดํ์ง ๋ชปํ์ง๋ง, ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ง์ฐ๊ณ ๋ค์ ํด ๋ณด๋ ์์ง๋์๋ค.
๋, airflow, docker, GCP, AWS ๋ชจ๋ ์ต์ํ์ง ์์ ์๋น์ค๋ผ ์ง๋ ๊ฒ์ ๋จน์ด ๊ฑฐ๋ถ๊ฐ์ด ์์๊ณ ์ค์ ๋ก ์ฌ๋ฌ ์ค๋ฅ๋ค๋ก ์ค๋ ๊ฑธ๋ ธ์ง๋ง ์ ํด๋๋ค.