이번 프로젝트를 진행하면서 큰 플로우는 다음과 같다.
raw_data -> GCS -> Cloud-Function 등등 -> Bigquery -> Power BI
지난 시간에 진행한 만들어둔 GCS, Bigquery 연동에 이어 GCS를 Python과 연동하여 처리하는 방식을 진행해보고자 한다.
연동에 앞서 GCS를 생성하고 프로젝트와 연동하는 작업을 미리 실행해준다.
이후 아래 코드를 활용하여 google cloud python library를 설치해준다.pip install google-cloud-storage
이후 GCS 콘솔에 접속해 다음을 실행한다.
프로젝트 -> IAM 및 관리자 -> 서비스 계정 -> 키생성(json)
만들어진 json파일은 자동으로 다운되며 작업중인 서버로 옮긴다.
이후 만든 서비스 계정을 사용하기 위해선 환경변수 설정이 필요한데, 다음 코드를 사용해준다.
from google.cloud import storage
from google.colab import auth
# 인증 설정
auth.authenticate_user()
# 클라이언트 생성
client = storage.Client()
# 버킷 가져오기
bucket_name = 'hale-posting-bucket'
bucket = client.get_bucket(bucket_name)
# 코랩에서 로컬환경 파일 1개 불러오기
from google.colab import files
upload = files.upload()
# 업로드한 파일을 Blob으로 원하는 GCS 폴더에 업로드
folder_path = 'sample-connection-test/'
for filename, content in upload.items():
blob_name = folder_path + filename
blob = bucket.blob(blob_name)
blob.upload_from_string(content)
print(f'{filename} 업로드 완료.')
그 결과 아래와 같이 GCS에 잘 업로드 된 것을 확인할 수 있다.
만일, 타인이 만든 GCS인 경우 아래 코드를 이용해 인증 및 클라이언트 생성을 해주어야 한다.
from google.cloud import storage
credentials_path = '/content/drive/My Drive/Colab Notebooks/DE_DevCos_Project2/job-posting-api-388303-8ec7283e13da.json'
# 인증 정보 설정
client = storage.Client.from_service_account_json(credentials_path)
# 버킷 가져오기
bucket_name = 'hale-posting-bucket'
bucket = client.get_bucket(bucket_name)
# 코랩에서 로컬환경 파일 불러오기
from google.colab import files
upload = files.upload()
folder_path = 'sample-connection-test/'
for filename, content in upload.items():
# 업로드한 파일을 Blob으로 업로드
blob_name = folder_path + filename
blob = bucket.blob(blob_name)
blob.upload_from_string(content)
print(f'{filename} 업로드 완료.')
오늘 코드로 자동화 작업도 하며 진행을 해보니, GCS에 있어 DW와 연결하는 부분을 협업하려면 별도로 진행하는 것보단, GCS - Bigquery과정에 있어 Cloud Function을 구축하는 부분만 데이터 타입, 형태에 따른 function을 파트를 나누어 만드는 것이 IAM 부여라든지, 데이터 정합성 측면에서 더 나은 것 같다.
물론, 클릭 몇 번만으로도 GCS에 저장된 데이터, S3 등 여러 클라우드 스토리지를 비롯해 로컬 환경으로부터 데이터를 Bigquery에 적재할 수 있으나, 자동화 과정을 거치는 작업을 진행하여 의미를 높이려 한다.
방법은 Cloud Function 기능 활용이다.