33
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【GoogleCloudPlatform】pythonでGCSバケットのデータを読み出す/書き出す

Last updated at Posted at 2018-06-27

なんだかんだと時間がかかったので、自分用のメモも兼ねて。

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 = プロジェクト名

#プロジェクト名を指定してclientを作成
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 = プロジェクト名

#プロジェクト名を指定してclientを作成
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.
  • 原因
    どうやらVMインスタンスに紐づくGoogleサービスアカウントの権限の問題のよう。(Googleサービスアカウントについては、このページを参考にさせていただきました。)

  • 解決策
    GCSのあるPJのIAMの権限設定で、エラーメッセージに表示されているサービスアカウントの権限設定を追加する。
    (ひとまずアカウントをPJの編集者に設定してアクセス可能であることを確認しました。)
    上記に加えて、バケットについても管理者権限が必要なようです。 (2019/07/03 追記)

33
34
3

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
33
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?