LoginSignup
14
11

More than 3 years have passed since last update.

Google Cloud Storage (GCS)にファイルをアップロード ~ ローカルのPythonで読み込む

Last updated at Posted at 2020-02-09

環境

  • MacOS X 10.14.5 (Mojave)
  • Homebrew 2.2.5
  • Google Cloud SDK 279.0.0
  • gsutil 4.47

GCPアカウント登録

【画像で説明】Google Cloud Platform (GCP)の無料トライアルでアカウント登録

Google Cloud SDKのインストール

Google Cloud SDKのインストール ~ 初期化

プロジェクト作成

Google Cloud SDKでプロジェクトを作成する

バケット作成

$ gsutilはstorageを操作するコマンドです。

$ gsutil mb -l us-central1 gs://バケット名

ファイルのアップロード

※ gcs上にディレクトリがない場合は作成される。

$ gsutil cp ローカルファイルのパス gs://バケット名/ディレクトリ名/ファイル名

サービスアカウント / サービスアカウントキーの作成

PythonからGCSにアクセスできるうようにするため、サービスアカウント / サービスアカウントキーを作成します。

サービスアカウント作成

gcloud iam service-accounts create サービスアカウントネーム \
                                   --display-name サービスアカウントディスプレイネーム \

スクリーンショット 2020-02-10 0.10.39.png

今プロジェクトに紐付いている権限を確認

gcloud projects get-iam-policy mypj-id

# bindings:
# - members:
#   - user:anata_no_address@gmail.com
#   role: roles/owner
# etag: BwWeTrntoao=
# version: 1

サービスアカウントへ権限付与

ストレージ管理者の権限を付与

gcloud projects add-iam-policy-binding プロジェクトID \
--member serviceAccount:サービスアカウントネーム@プロジェクトID.iam.gserviceaccount.com \
--role roles/storage.admin

スクリーンショット 2020-02-10 0.16.18.png

roleリスト

再度権限を確認

gcloud projects get-iam-policy mypj-id

# bindings:
# - members:
#   - user:anata_no_address@gmail.com
#   role: roles/owner
# - members:
#   - serviceAccount:mysa-name@mypj-id.iam.gserviceaccount.com
#   role: roles/storage.admin
# etag: BwWeTz6vIBY=
# version: 1

サービスアカウントキー作成

$ gcloud iam service-accounts keys create ./service_account_keys/anata_no_key.json \
--iam-account サービスアカウントネーム@プロジェクトID.iam.gserviceaccount.com

ディレクトリ構成

.
├── .env
├── service_account_keys/
│      └── anata_no_key.json
└── working/
        └── main.py

.env

環境変数にさっき作ったサービスアカウントキーのパスを設定するためこんな記述で。
※ 読み込み元ファイル(load_dotenv()してるファイル)からの相対パス

.env
GOOGLE_APPLICATION_CREDENTIALS=./service_account_keys/anata_no_key.json

ライブラリのインストール

google-cloud-storage python-dotenv pandas をpipでインストール

$ pip install google-cloud-storage python-dotenv pandas

Pythonでダウンロード

main.py
import os
from io import BytesIO

from dotenv import load_dotenv
from google.cloud import storage
import pandas as pd


# .envの内容を環境変数に設定
load_dotenv('./.env')

PROJECT_ID = 'anata_no_project_id'
BUCKET_NAME = 'anata_no_bucket'
FILE_PATH = 'path/to/dir/train.csv' # gs://バケット名/~以下のパス

client = storage.Client(PROJECT_ID)
bucket = client.get_bucket(BUCKET_NAME)
blob = storage.Blob(FILE_PATH, bucket)
data = blob.download_as_string()
df = pd.read_csv(BytesIO(data))
print(df)

# ローカルに保存する場合
blob.download_to_filename('path/to/local/dir')

dfとして表示されればOKです。

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11