【GoogleCloudPlatform】pythonでGCSバケットのデータを読み出す/書き出す
なんだかんだと時間がかかったので、自分用のメモも兼ねて。
GCP上のインスタンスで、GCS (Google Cloud Storage)のバケット内データを読み書きするpythonコードです。
pythonコードは Anacondaの jupyter notebookで実行しています。
前準備:インストール
まず google cloud をインストール
$ pip install google-cloud
$ pip install google-cloud-storage (2019/01/30修正)
データの読み出し
from google.cloud import storage as gcs bucket_name = バケット名 fname = ファイル名 project_name = プロジェクト名 #プロジェクト名を指定してcliaentを作成 client = gcs.Client(project_name) #バケット名を指定してbucketを取得 bucket = client.get_bucket(bucket_name) #Blobを作成 blob = gcs.Blob(fname, bucket) content = blob.download_as_string()
データの書き出し
from google.cloud import storage as gcs bucket_name = バケット名 fname = ファイル名 project_name = プロジェクト名 #プロジェクト名を指定してcliaentを作成 client = gcs.Client(project_name) #バケット名を指定してbucketを取得 bucket = client.get_bucket(bucket_name) #Blobを作成 #2019/01/30修正 blob = gcs.Blob(fname, bucket) blob.upload_from_string('test')
403エラーが出る場合
VMインスタンスを動かしているPJとは別のPJのGCSにアクセスしようとすると、以下のようなエラーが出た。
- エラーメッセージ
Forbidden: 403 GET https://www.googleapis.com/download/storage/hogehoge: google_service_account_name@developer.gserviceaccount.com does not have storage.objects.get access to bucket_name/file_name.