본문 바로가기
프로그래밍/Python

[GCP]Google Cloud Storage에 엑셀이랑 이미지와 같은 파일들 저장하기(+How to save file to Google Cloud Storage using python code)

by Mr.noobiest 2024. 1. 3.

 

Google Cloud Storage


Google Cloud Platform중 파일 저장 및 데이터 저장(Bigquery)과 연동이 가능한, Google Cloud Storage는 단순하게 생각하면 그냥 네이버 마이박스나, 구글 드라이브와 같은 저장 공간이다.

Google Cloud Storage


 

 

GCS의 장단점

 

장점  단점
높은 확장성 복잡한 가격 정책
우수한 데이터 접근성 학습 곡선(배우기 어려움)
다양한 데이터 관리 및 보안 기능 인터넷 의존도
비용 효율성 데이터 이전 비용
다중 리전 데이터 복제 제한된 지원


 
 



 
 

Google Cloud Storage의 기능


간단한 데이터 백업 부터, Storage안에는 모든 파일과 이미지를 저장할 수 있고, 같은 GCP에 속해있는 Bigquery와 연동하여 데이터베이스 구축이 가능하다.

또한 저장된 이미지는 URL을 통해 호스팅된것처럼 사용이 가능하다.(간단한 데이터 서버)

 


 

 

Python코드로 Google Cloud Storage에 파일 업로드하기

 

1) 먼저 Credentials.json을 가져와야한다.


1-1) IAM 및 관리자 -> 서비스 계정

https://console.cloud.google.com/iam-admin/serviceaccounts

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

 

1-2) 키 -> 키 추가 -> 새 키 만들기 -> JSON으로 만들기

서비스 계정 -> 키 -> 키 추가 -> 새 키 만들기

 

JSON으로 만들기

 

그러면 자동으로 json파일을 다운로드 한다.(절대 노출되어서는 안되니 주의 할것)

 

 


 

 

2) 파일 업로드 Python 코드-1

from datetime import datetime
from google.cloud import storage
import io
from PIL import Image
from google.oauth2 import service_account
import pandas_gbq
import os
import pandas as pd


# GCS와 연동하기
#[IAM 및 관리자] -> [서비스 계정]에서 .json파일을 다운가능하다.
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="저장한 Credentials.json"

# 파일명 불러오기 / 저장할 위치+파일명
bucket_name = 'Storage 버킷명'
source_file_path = '원본 엑셀.csv'                                  #-------------------------------------------csv명
source_file_path2 = '원본 이미지.png'                                 #-------------------------------------------png명
destination_blob_path = 'Excel_Data/저장할 엑셀명.csv'    #-------------------------------------------csv명
destination_blob_path = 'Image_Data/저장할 이미지명.csv' #-------------------------------------------png명

 

#이때  Google Cloud Platfrom > Google Cloud Strage > Bucket안에 있는 폴더명이다.

Cloud Storage의 버킷 생성후 버킷명을 사용하면된다.

이후 아래와 같이  코드를 실행하여 데이터를 Strage로 전송하면된다.

 

 


 

3) 파일 업로드 Python 코드-2

 

# 데이터 업로드-준비
def upload_to_storage_file(bucket_name: str, source_file_path: str, destination_blob_path: str):
    storage_client = storage.Cliet()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_path)
    blob.upload_from_filename(source_file_path)
    print(f'The file {source_file_path} is uploaded to GCP bucket path: {destination_blob_path}')
    return None

# 데이터 업로드-실행
upload_to_storage_file(bucket_name, source_file_path, destination_blob_path)

# 이미지 업로드-준비
def upload_to_storage_Image(bucket_name: str, source_file_path2: str, destination_blob_path2: str):
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_path2)   
    im = Image.open("image_test.png")                               #-------------------------------------------png명
    bs = io.BytesIO()
    im.save(bs, "png")
    blob.upload_from_string(bs.getvalue(), content_type="image/png")
    return None


upload_to_storage_Image(bucket_name, source_file_path2, destination_blob_path2)

 

 

 

끝.

728x90
반응형