python과 GCP Cloud Storage을 연동시켜 두면 정적인 파일을 주기적으로 관리하기 편리하다. 이를 위해서는 GCP에서 user 인증을 하는 과정, 인증서를 발급받아 연동하는 방법 등을 거쳐야하며 이를 정리하고자 한다.
0. 사전준비
1) GCP 프로젝트, 리소스 생성
구글 Cloud Console에서 프로젝트, storage, 그리고 storage에서 bucket을 생성해둔다. 다 되었다면 Cloud Console에서 아래 화면과 같이 보인다.
2) Google Could 파이썬 라이브러리 설치
pip install google-cloud-storage
1. Google Cloud API 인증
공식 가이드 문서는 글로만 설명이 되어 있는데, 화면과 함께 정리하고자 한다.
1) 서비스 계정 & 키 만들기
i. 서비스 계정 만들기
Cloud Console에서의 서비스 계정 만들기 페이지로 이동해서 생성하기 시작한다. 아래 화면이 해당 페이지이며 여기서 인증할 프로젝트를 선택한다.
이후 '서비스 계정 세부정보'에서 서비스 계정 이름, 설명 등을 입력하면 아래 화면이 나온다. 여기서 역할에 '소유자'를 부여해야 한다(★).
완료를 통해 서비스 계정을 만든다.
ii. 서비스 계정 키 만들기
계정 생성 후 '서비스 계정' 화면으로 들어가 생성한 계정을 클릭한다.
계정 클릭 후 '키'를 누르고 키 추가를 선택하여 새 키를 만들어준다. 새 키 만들기 버튼을 누르고 json 유형을 선택하고 만들기를 누르면 json 파일이 받아진다. 이를 로컬이나 서버 작업환경에 옮겨둔다.
2) 환경 변수 설정
Cloud SDK를 통해 서비스 계정을 사용하려면 코드가 실행되는 환경변수를 설정해야 한다.
아래와 같이 터미널에서 인증을 하거나
# KEY_PATH에 다운로드 받은 json 경로 입력
# ex) "/home/user/Downloads/service-account-file.json"
export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"
파이썬 코드에서 os를 import하여 환경변수를 설정해준다.
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="KEY_PATH"
3) 인증 확인
아래 코드 실행결과 계정을 생성한 프로젝트의 bucket 목록이 보인다면 제대로 생성된 것이다.
from google.cloud import storage
storage_client = storage.Client()
buckets = list(storage_client.list_buckets())
print(buckets)
2. Python용 Cloud 클라이언트 라이브러리 활용하기
1) Python 라이브러리 설치
pip install google-cloud-storage
2) GCP에 파일 올리기
아래 코드로 GCP에 파일을 올릴 수 있다.
from google.cloud import storage
bucket_name = '' # 서비스 계정 생성한 bucket 이름 입력
source_file_name = '' # GCP에 업로드할 파일 절대경로
destination_blob_name = '' # 업로드할 파일을 GCP에 저장할 때의 이름
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
3) GCP에서 파일 다운로드
아래 코드로 GCP에서 파일을 받을 수 있다.
from google.cloud import storage
bucket_name = '' # 서비스 계정 생성한 bucket 이름 입력
source_blob_name = '' # GCP에 저장되어 있는 파일 명
destination_file_name = '' # 다운받을 파일을 저장할 경로("local/path/to/file")
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(source_blob_name)
blob.download_to_filename(destination_file_name)
'개발' 카테고리의 다른 글
[Miniconda] 가상환경 명령어 (0) | 2022.01.18 |
---|---|
[FTP] 리눅스 shell script로 FPT 사용하기 (0) | 2021.09.23 |
[jupyter] jupyterthemes로 jupyter notebook 테마 설정하기 (0) | 2021.08.29 |
[MAC] zsh로 miniconda 실행하기(zsh: command not found) (0) | 2021.08.26 |
[Docker + Flask] 간단한 추론 API 서버 띄우기 (0) | 2021.07.08 |