난 정말 제일 힘들었던 말하면 바로 docker와 airflow다
블로그에 올린 것만 종류가 여러갠데
전부 다 실패했다 -> 비용적인 문제와 메모리 문제 등등
진짜 마지막으로 발견한게 gcp인데 드디어 내 노트북에 설정을 완료했다
거의 3일내내 이거 오류 잡고 이해하는데 쏟아 부은 듯 하다
GCP 크레딧 생성
1. GCP 란
AWS 클라우드 서비스 중 하나로
간단하게 말하자면
GCP를 처음 가입하는 사람이라면 AWS보다 무료로 사용할 수 있는게 많은 서비스다
무료로 사용 가능한게 무려 41만원!!
AWS 사용하다가 돈나오는게 열받는다면 GCP를 강력 추천하다
2. 새로운 프로젝트 생성
Airflow라는 새로운 프로젝트를 생성준다
airflow 프로젝트로 변경도 설정
3. 인스턴스 만들기
이젠 인스턴스를 만들어야한다
compute Engine -> vm인스턴스 > 인스턴스 만들기
처음엔 이렇게 높게 해야하나 싶었는데
실습을 엄청 크게 하는거 아니라서 기본으로 설정해도 잘 돌아간다
각자 하는 프로그램에 맞춰서 만드시길
이것도 일단 ec2 기본으로 설정했다
나중에 변경이 가능하다
이렇게 변경해주고
완성하면
이렇게 인스턴스가 생성된 걸 볼 수 있다
이제 끝애 있는 SSH를 실행해서 작업을 실행하면 된다
4. 방화벽 설정
추가로 gcp는 보안에 매우 민갑하기 때문에
방화벽 설정은 필수로 해주는게 좋다고 한다
vpc 네트워크 > 방화벽
방화벽 정책 만들기 선택
https://burning-dba.tistory.com/125
자세한 내용은 이 분 블로그 참고하면 좋을 것 같다
GCP에서 docker 설치 후 airflow실행
1. airflow 디렉토리 및 파일 초기설정
디렉토리 생성하기
mkdir ~/airflow_test
cd ~/airflow_test
디렉토리 구조 만들기
mkdir dags logs plugins
2. docker와 docker compose설치
docker 설치
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
docker설치확인
docker --version
docker compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker compose 설치 확인
docker-compose --version
3. docker-compose.yaml 파일 작성
4. 권한설정
sudo chown -R $USER:$USER dags logs plugins
Airflow 컨테이너가 dags, logs, plugins 디렉토리에 접근할 수 있도록 권한 설정
5. airflow 초기화 및 실행
docker-compose up airflow-init
docker-compose up -d
6. 실행 확인
docker ps
status가 up로 떠야한다
7. 외부ip 주소 연결
http://<GCP_EXTERNAL_IP>:8080
외부ip 고정
로컬에서 airflow를 실행한다면 보통은 http://127.0.0.1:8080 을 통해서 접근이 가능하겠지만
GCP와 같은 클라우드 환경에서는 해당 airflow 인스턴스가 외부 네트워크에 노출되지 않는 한 접근 불간으하다
따라서 외부 ip를 설정해서 인터넷상 다른 사용자들이 airflow를 웹서버에 접근 할 수 있도록 설정해줘야한다
고정ip를 설정안하면 인슽턴스를 끄고 킬때마다 외부 ip가 달라지니
gcp의 고정ip를 설정해주도록 했다
https://datainsider.tistory.com/108
방법은 위의 링크를 통해서 설정하면 된다
* 문제 발생한다면 로그 확인
docker logs airflow-webserver
docker logs airflow-scheduler
오류 문제
컨데이터 로그 문제
[Errno 13] Permission denied: '/opt/airflow/logs/scheduler'
방화벽 이슈인 줄 알았으니 컨테이너 로그를 확인해보니 위와 같은 에러가 떴다
위의 에러는 '파일 또는 디렉토리에 대한 접근 권한이 없어서 발생한다는 뜻'
즉 권한 이슈로 컨테이너가 비정상적으로 뜨고 죽고 뜨고 죽고를 반복하고 있어서 안되고 있었던 거였다
# 기존 디렉토리 삭제
rm -rf dags logs plugins
# 새 디렉토리 생성
mkdir dags logs plugins
#airflow초기화
docker compose up airflow-init
#권한설정(현재 유저가 소유자가 되도록)
sudo chown 유저ID:유저ID dags logs plugins
#컨테이너 실행
docker compose up -d
순으로 진행하면 아주 잘된다
scheduler, webserver, postgres 등이 모두 Up 상태로 표시되어 있는지 확인 하려면
docker ps
이 코드를 작성하면 된다
GCP에서 잠시 중지를 누르고 다시 실행하는 경우라면
cd /home/유저ID/airflow_test
ls -al
했을 때 dags, logs, plugins 디렉토리의 소유자가 root 로 되어있지 않은지 확인
하나라도 root로 되어있다면
#-R 옵션은 하위 폴더와 파일까지 모두 소유권을 변경
sudo chown -R 유저ID:유저ID dags logs plugins
이후
ls -al
를 보면 모드 동일한 소유자로 변경된 걸 확인할 수 있다
airflow 컨테이너 중단다고 재실행
docker compose down
하면 되는데 이때 이걸 동작하면 또 사이트 연결이 안된다
이때는 당황하지 말고 처음과 동일한 상황이기에
'컨테이너 로그문제' 때 작성했던 코드를 다시 작성해주면
정상적으로 airflow가 동작하는 걸 볼 수 있다
'데이터엔지니어링 > Airflow' 카테고리의 다른 글
anaconda 비쥬얼스튜디오코드 가상환경 설정방법 윈도우 (1) | 2024.11.26 |
---|---|
docker 설치하고 airflow 설치하기 윈도우 (1) | 2024.11.25 |
Airflow의 Operator와 Decorators의 활용 및 Backfill 정의 (0) | 2024.11.25 |
gcp 코드 4003에러 해결 : Cloud Identity-Aware Proxy를 통한 연결 실패 VM에 IP 범위 35.235.240.0/20, 포트 22에서 오는 TCP 인그레스 트래픽을 허용하는 방화벽 규칙 (0) | 2024.11.23 |
트랜잭션과 aws ec2에 docker 설치 윈도우 버전 (1) | 2024.11.23 |