이번에는 dag를 만들어보기로 했다
그러려면 gcp와 vscode를 연결해야해서
한 번 설정을 해보겠다
1-1. vscode에 연결하기
gcloud compute ssh <VM_NAME> --zone <ZONE>
- <VM_NAME>: VM 인스턴스 이름.
- <ZONE>: VM이 위치한 Zone (예: asia-northeast3-a).
vscode 터미널이나 powershell 또는 cmd에 입력
이렇게 창이 뜨면 Accept 선택
error 참고
만약 위의 사진처럼 에러가 난다면
공개 키(public key) 등록할 때 마지막에 email 주소 들어가있지 않아서 그럴 수도 있다
https://cloud.google.com/compute/docs/connect/create-ssh-keys?hl=ko
이 링크 참고해서 마지막에 VM 사용자 이름이 안 나와 있어서 등록을 하도록 하자
아무튼 별다른 문제 없이 나온다면
accept를 눌렀을 때 이렇게 vscode랑 gcp의 ssh가 연결된 것을 볼 수 있다
1-2. 나갔다가 다시 설정하는 경우
gcloud --version
혹시나 설치했는지 확인이 필요하다면 위 코드를 통해서
Google Cloud SDK 420.0.0
bq 2.0.92
core 2023.01.01
이런식으로 결과가 나오는 지 확인 가능하다
gcloud auth login
이후 로그인까지 완료되면 연결되는 것을 볼 수 있다
2-1. GCP 프로젝트 설정
gcloud projects list
list로 프로젝트를 참고해서
gcloud config set project <PROJECT_ID>
<PROJECT_ID>는 위 명령어에서 확인한 프로젝트 ID로 대체
2-2. 기본 Region과 Zone 설정
gcloud compute zones list
사용가능한 zone을 확인하고
gcloud config set compute/zone asia-northeast3-a
zone설정을 해준다
만약 어떤 zone을 할지 모르겠으면 vm인스턴스에 있는 영역을 참고하면 된다
2-3. GCP VM 설정
gcloud compute instances list
현재 프로젝트에 생성된 VM 인스턴스를 확인하면
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
airflow asia-northeast3-a e2-medium FALSE 10.128.0.2 34.64.123.45 RUNNING
이런식으로 나오는데
- STATUS가 RUNNING이어야 SSH 연결이 가능하다
- 만약 연결이 안되어있으면 vm인스턴스 시작 버튼을 눌러주자
- EXTERNAL_IP가 없다면 외부 IP를 추가해야한다
- 외부 IP 확인:
- 위 명령어에서 EXTERNAL_IP 열을 확인합니다.
- 값이 없다면 외부 IP가 설정되지 않은 것입니다.
- 외부 IP 추가:
- GCP 콘솔에서 VM을 선택 → 편집 → 네트워크 인터페이스 → 외부 IP → 새로운 외부 IP 생성
- 외부 IP 확인:
2-4. 방화벽 설정
gcloud compute firewall-rules list
를 통해서 방화벽을 확인한다
**SSH(포트 22)**가 허용된 상태이므로 이 규칙은 잘 설정된 것임
3. vscode에 있는 dag 파일 저장
exit
현재 SSH 터미널에 종료하고
gcloud compute scp "<파일경로>" airflow:/home/<USER>/airflow_test/dags --zone asia-northeast3-a
로컬 PC(Windows)의 PowerShell 또는 CMD(명령 프롬프트)에서 아래 명령어를 실행해준다
정확한 파일 경로를 불러와야한다
gcloud compute ssh airflow --zone asia-northeast3-a
다시 vscode에서 위 코드를 입력해 GCP VM에서 파일 확인
ls /home/<USER>/airflow_test/dags
업로드된 파일 확인
해결 방법 : GCP VM에 디렉터리 쓰기 권한 부여
error
**Permission Denied**로 인해 파일을 GCP VM의 지정된 디렉터리에 업로드할 수 없다는 것으로
이 문제는 GCP VM의 업로드 대상 디렉터리에 쓰기 권한이 없어서 발생한거라 쓰기 원한을 부여해야한다
1. SSH로 GCP VM에 접속
gcloud compute ssh airflow --zone asia-northeast3-a
2. 디렉터리에 쓰기 권한 확인 및 부여:
업로드 대상 디렉터리에 쓰기 권한을 부여함
sudo chmod -R 777 /home/wjdeun0642/airflow_test/dags
3. 권한 변경 확인
ls -ld /home/wjdeun0642/airflow_test/dags
출력에서 drwxrwxrwx가 표시되면 권한이 제대로 부여된 것
4. DAG 파일 업로드
SSH 세션을 종료한 후, 다시 로컬 PowerShell 또는 VSCode 터미널에서 파일 업로드 명령어를 실행
gcloud compute scp "<파일경로>" airflow:/home/<USER>/airflow_test/dags --zone asia-northeast3-a
5. 업로드 성공하면 파일 업로드 되었는지 확인
ls /home/<USER>/airflow_test/dags
4. docker 연결
1) 디렉터리 이동
cd /home/<USER>/airflow_test
먼저, Docker Compose 파일이 있는 디렉터리로 이동
2) Docker Compose 상태 확인
docker-compose --version
3) Docker Compose를 사용한 Airflow 실행
docker-compose.yaml 파일을 사용해 Airflow를 실행하려면 아래 명령어를 실행하세요
3-1) 초기화 (최초 실행 시 필요)
docker-compose up airflow-init
3-2) Airflow 서비스 시작:
- Docker Compose를 통해 Airflow와 관련된 모든 서비스를 백그라운드에서 시작
docker-compose up -d
3-3) Airflow 연결상태 참고
docker ps
5. 웹 서버 확인
Airflow 웹 UI는 Docker Compose 파일에서 정의된 포트에서 실행됩니다. 기본적으로는 포트 8080
- GCP VM에서 SSH 포트 포워딩 사용 (로컬 머신에서 접속): 로컬 브라우저에서 Airflow 웹 UI에 접근하려면 SSH 포트 포워딩을 설정합니다
gcloud compute ssh airflow --zone asia-northeast3-a -- -L 8080:localhost:8080
- 로컬 브라우저에서 Airflow 접속:
- 브라우저에서 http://localhost:8080을 열어 Airflow 웹 UI에 접속
6. Docker Compose 정지 및 재시
#서비스 중지
docker-compose down
#서비스 재시작
docker-compose up -d