본문 바로가기
데이터엔지니어링/Airflow

gcp 인스턴스 생성 및 방화벽 생성하고 docker 및 airflow 설치하기 윈도우 버전

by goemgoem-i 2024. 12. 18.
반응형

난 정말 제일 힘들었던 말하면 바로 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 방화벽(firewall) 설정

GCP / AWS 등의 클라우드 환경을 사용하면 보안에 매우 민감합니다. 사용자들이 불특정 다수이며, 비 IT 직군도 많다 보니 이러한 보안에 취약할 수밖에 없습니다. 물론 규모가 큰 회사의 경우 보안

burning-dba.tistory.com

자세한 내용은 이 분 블로그 참고하면 좋을 것 같다

 

 

 

 

 

 

 

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 파일 작성

docker-compose.yaml
0.01MB

 

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

 

[GCP] Google Cloud Platform 고정 IP 설정하기

1. vpc 네트워크 > ip 주소 클릭 2. 오른쪽 라벨 예약 클릭 > 이름 및 설명 작성 3. 설정완료 *고정 아이피 설정 안할 시 인스턴스 끄고 킬때마 외부 ip가 달라짐 1. vpc 네트워크 > ip 주소 클릭 2. 오른쪽

datainsider.tistory.com

방법은 위의 링크를 통해서 설정하면 된다

 

 

 

 

* 문제 발생한다면 로그 확인

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가 동작하는 걸 볼 수 있다 

 

 

 

반응형