概要
gcloudコマンドを使わずにPythonとgoogle-cloudを使ってGoogle Cloud Storage(GCS)に頑張ってファイルをアップロードしてみる。google-cloudはPython向けのGoogle Cloud Platformの何かを操作するためのクライアントライブラリ。GCPの以下の機能の操作がサポートされている。
- GA
- Google Cloud Datastore
- Google Cloud Storage
- Google Cloud Translation
- Stackdriver Logging
- Beta
- Google BigQuery
- Google Cloud Natural Language
- Google Cloud Speech
- Google Cloud Video Intelligence
- Google Cloud Vision
- Alpha
- Google Cloud Bigtable
- Google Cloud Bigtable
- Google Cloud DNS
- Google Cloud Pub/Sub
- Google Cloud Resource Manager
- Google Cloud Runtime Configuration
- Google Cloud Spanner
- Stackdriver Error Reporting
- Stackdriver Monitoring
gcloudコマンドはPython 2.7を必要とするんだけど、Python 2.7をどうしてもインストールできない環境で役立つ話だと思う。自分はHerokuでPython 3.6.x を使っていて、gcloudコマンドのためにPython 2.7をインストールできなくて困っていたのだけど、このgoogle-cloudライブラリを使うようにしてみた。
セットアップ
前提として
- Python 3.4 以上
- pip
がインストールされていること。
$ pip install google-cloud
でgoogle-cloudをインストールする。
認証
google-cloudのライブラリを使うにあたり、credentialが必要になる。おそらく一番ラクなのは
- GCPのConsoleでService Accountを作って
- そのcredential情報をJSONファイルとして取得し
GOOGLE_APPLICATION_CREDENTIALS
環境変数で指定する
ことだと思う。詳しい話は google-authのドキュメントに書いてある。その他の認証のやり方についても詳しく書いてある。
Pythonのスクリプトを実行する前に以下のコマンドで credential 情報のJSONファイルを指定すれば、Pythonのスクリプトでは特に何もしなくてOKだ。
$ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
GCSにファイルをアップロードする
それでは本題。google-cloudのstorageモジュールを使ってGCSにファイルをアップロードしてみる。
get_bucket
でバケットを取得してblob
オブジェクトを作ってアップロードする
感じ。
from google.cloud import storage import sys def upload(bucket_name, f): client = storage.Client() bucket = client.get_bucket(bucket_name) new_blob = bucket.blob(f) new_blob.upload_from_filename(f) if __name__ == '__main__': if len(sys.argv) < 3: print('gcs.py <bucket> <file>', file=sys.stderr) sys.exit(1) upload(sys.argv[1], sys.argv[2])
まとめ
gcloudコマンドは早くPython3対応するかGoで書き直されて欲しい。
プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで
- 作者: 阿佐志保,中井悦司
- 出版社/メーカー: 翔泳社
- 発売日: 2017/06/02
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る