융무의 기술블로그
article thumbnail

데이터 엔지니어링 줌 캠프 PJT를 진행하면서 관련된 내용을 정리하고자 합니다.

프로젝트의 코드는 github에서 확인할 수 있습니다.

https://github.com/mjs1995/data-engineering-zoomcamp/tree/main/01_basics_n_setup

 
GitHub - mjs1995/data-engineering-zoomcampGitHub에서 계정을 생성하여 mjs1995/data-engineering-zoomcamp 개발에 기여하십시오.

github.com


GCP 환경 세팅

프로젝트 이름에 dtc-de를 입력하고 프로젝트를 생성해 줍니다.


SSH 세대

ssh-keygen을 이용해서 키를 생성해줍니다.

# ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C 사용자 이름 -b 2048 
ssh-keygen -t rsa -f ~/.ssh/gcp -C mjs -b 2048


컴퓨팅 엔진

gcp 내에서 Compute Engine API를 사용등록해줍니다.

위에서 만든 gcp.pub의 ssh-rsa 코드 키값을 metadata에 추가해줍니다.

고양이 gcp.pub


VM 인스턴스

vm 인스턴스를 생성해줍니다.

이름과 리전 및 영역을 선택해주고 머신을 e2-standard-4로 선택해줍니다.

 



 

부팅 디스크를 Ubuntu로 변경해줍니다.

생성된 VM을 터미널에서 연결해봅니다. 

ssh -i ~/.ssh/gcp {ssh키 생성시 입력한 ID}@{VM 생성시 외부IP}

htop 명령어를 통해서 연결을 확인합니다.

htop

gcloud 명령어를 통해서 gcp에 잘 연결되었는지 확인합니다.

gcloud --version


아나콘다 설치

vm에 연결된 뒤에 아나콘다를 설치해줍니다.

touch 명령어를 통해서 config 파일을 생성하고 code config 명령어로 코드 위치를 열어줍니다.

wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh
bash Anaconda3-2023.03-Linux-x86_64.sh
touch config 
code config


도커 설치 

다음 명령어를 통해서 도커를 설치해줍니다.

sudo apt-get update
sudo apt-get install docker.io

vscode에서 Remote - SSH 어플리케이션을 다운받은 뒤에 호스트에 연결해 줍니다.

 

이제 config 파일을 통해서 ssh -i ~/.ssh/gcp {ssh키 생성시 입력한 ID}@{VM 생성시 외부IP} 명령어가 아닌

간단한 명령어로 접속 가능합니다.

ssh de-zoomcamp


Git

DataTalksClub의 github의 주소에서 소스코드를 clone해옵니다.

git clone https://github.com/DataTalksClub/data-engineering-zoomcamp.git
docker run hello-world

sudo 명령어 없이 도커 명령어 쓰기

sudo groupadd docker
sudo gpasswd -a $USER docker
sudo service docker restart

exit 후에 다시 ssh de-zoomcamp로 로그인해서 명령어를 실행하면 sudo 권한없이 잘 실행된다.


Docker Compose

해당 주소에서 링크 주소를 복사한 뒤에 설치해줍니다. chmod 명령어를 통해서 실행 가능한 파일로 변경시켜줍니다.

mkdir bin
cd bin
wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -O docker-compose
chmod +x docker-compose : 실행 가능한 파일로 변경
./docker-compose version

mac에서 ctrl+v 로 맨 끝으로 이동 후 경로를 추가해주고 ctrl+o로 저장후 Enter를 치고 ctrl+x 로 나옵니다.

source 명령어를 통해서 변경 사항을 반영해줍니다.

export PATH="${HOME}/bin:${PATH}"
source .bashrc

cd data-engineering-zoomcamp/week_1_basics_n_setup/2_docker_sql/
docker-compose up -d
docker ps

새로운 터미널에서 pgcli를 설치합니다.

cd data-engineering-zoomcamp/
pip install pgcli
pgcli -h localhost -U root -d ny_taxi

에러가 발생하여 해결하기 위해 psycopg-binary 라이브러리를 설치하고 다시 root로 로그인합니다.

pip install psycopg-binary

pip uninstall pgcli
conda install -c conda-forge pgcli

pgcli 라이브러리를 설치할떼 더 이상 넘어가지 않고 failed with initial frozen solve. Retrying with flexible solve 에러가 발생했습니다. 해당 에러는conda로 패키지를 다운받을 때 최신 버전이 아니여서 생기는 에러중 하나였습니다.

conda update --all
conda install -c conda-forge pgcli

pgcli -h localhost -U root -d ny_taxi

이제 아무 문제 없이 잘 작동하는걸 확인할 수 있습니다.


로컬 머신에서 포트 포워딩

VM과 연결되어있는 vscode에서 ctrl+`로 터미널을 엽니다.

5432 포트와 8080 포트를 열어줍니다.

관련해서 터미널의 pgcli와 localhost:8080가 잘 연결되는지 확인합니다.


Jupyter Notebook

Jupyter Notebook을 설치한 뒤에 8888 포트를 열어줍니다.

그 후에 원본 데이터를 다운로드 받고 Jupyter Notebook에 필요한 라이브러리들을 설치해줍니다.

pip install jupyter notebook
wget https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2022-01.parquet

주피터 노트북에서 postgreSQL로 table을 생성하고 데이터를 인입합니다.


Terraform 설치

테라폼 다운로드 홈페이지에서 링크 주소를 복사합니다.

cd bin/
wget https://releases.hashicorp.com/terraform/1.4.4/terraform_1.4.4_linux_amd64.zip
sudo apt-get install unzip
unzip terraform_1.4.4_linux_amd64.zip
rm terraform_1.4.4_linux_amd64.zip
terraform --version

테라폼 버전을 확인해서 설치가 잘 되었는지 확인합니다.


sftp 설정

IAM 서비스계정을 생성해줍니다.

  • dtc-de-user 계정 이름으로 뷰어 생성
  • 키 관리에서 JSON 키추가

위에서 받은 .JSON 파일을 ny-rides.json으로 변경해줍니다.

VM인스턴스에 연결을 하려고 했는데 Google Compute Engine ssh: connect to host port 22: Operation timed out 에러가 발생하였습니다.

#! 22. /bin / bash 
sudo ufw 허용
    • 이 경우에도 에러가 해결이 안될때가 있습니다.
    • 인스턴스 정지 후 다시 시작하면 ip가 종종 바뀌게 되는데 이때 다시 수정을 해주고 연결해봅니다.
cd ~/.ssh
코드 구성
mkdir .gc
mv ~/Downloads/ny-rides.json ~/.gc
  • sftp로 연결후에 파일을 업로드 해줍니다.
mkdir .gc
ny-rides.json 넣기
GOOGLE_APPLICATION_CREDENTIALS=~/.gc/ny-rides.json 내보내기
gcloud auth activate-service-account --key-file $GOOGLE_APPLICATION_CREDENTIALS

 

  • export GOOGLE_APPLICATION_CREDENTIALS=~/.gc/ny-rides.json : VM에 있는 json 파일을 환경변수로 설정해줍니다.
  • gcloud auth activate-service-account --key-file $GOOGLE_APPLICATION_CREDENTIALS : google cloud cli로 인증 설정을 해줍니다.

Terraform 실행

cd data-engineering-zoomcamp/week_1_basics_n_setup/1_terraform_gcp/terraform/ 에서 terraform init 명령어를 실행합니다.

terraform plan 에서 GCP의 프로젝트 ID를 입력해줍니다.

프로젝트 ID인 dtc-de를 입력하고 엔터를 누릅니다.

variables.tf 파일을 수정해서 default값으로도 추가가 가능합니다.

region의 경우 asia-northeast3 이므로 해당 코드도 수정해 줍니다.

terraform apply 명령을 수행합니다.

 

여기까지 프로젝트를 위한 환경 설정 부분이였습니다.


Reference

데이터 엔지니어링 줌 캠프 깃허브 주소 
youtube
DataTalks.Club
data engineering zoomcamp slack

 

profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!