タグ別アーカイブ: Google Cloud Storage

GCS(Google Cloud Storage)からPythonでデータを取り出し表示する

前の記事「Google Cloud StorageにPythonでデータのやり取りをする」」でウェブ上ではなくて、プログラム(python)経由でデータをGCS(Google Cloud Storageグーグルクラウドストレージ)へ入れる方法と取り出す方法をメモしたんだけど、取り出して表示する場合についての追加メモ。

GCS(Google Cloud Storage)内のデータを表示する方法は2つあるらしく、固有のBucket名と自分でデータを入れるときに付けたファイル名が繋がったものと、全く推測不可能な文字の羅列からなるURL。固有のBucket名が入る方は、ACLというアクセスをコントロールできる機能があるので、プログラムやGCS(Google Cloud Storage)のコントロールパネルから表示非表示やアクセスを特定の人に限定する等の制御ができるっぽい。もう一つの文字の羅列からなる方は、制御はできず、元のファイルを削除するまで誰でも見れて、ファイルも残るっぽい。どちらも別の専用URLからデータが送られるので、クッキーが無く(この意味もよくわかってないけど)実際に試してみると爆速で表示された。

GCS(Google Cloud Storage)内に入れたデータを表示する時、Bucket名を含む表示は、URLすべてわかっているので簡単。URLは、グーグルのURL + Bucket + 自分で付けたファイル名みたいな感じになる。こちらは、データを入れるときに、オプションでみんなに公開するか、後悔しないか等、いろいろ設定できる。GCSのコントロールパネルからも一般公開にチェックを入れると、公開用のURLが表示されたりする。

もうひとつの文字の羅列からなるURLで表示する場合は、create_gs_keyでキーをゲット(ファイル名は、”/gs”にBucket+データを入れるときに自分で付けたファイル名を繋げたもの)して、そのキーをget_serving_urlに入れると表示用のURLを作成してくれる。

ただ、元のデータの中身を同じファイル名で上書き更新しても、その作成されたURLで表示されるデータは更新以前のままでキャッシュされたものが表示されるっぽい、なので更新するには、別のファイル名にして再度URLを作りなおさないととダメっぽい。公開用のURLを消すには、GCS内のデータを消すか、delete_serving_urlでキーを入れると消える。

create_gs_keyはblobstoreの機能なんだけど、blobstoreが何なのかイマイチ理解していない。GCS(Google Cloud Storage)と似たようなものらしいけど、GCS(Google Cloud Storage)と違い、ウェブ上のコントロールパネルから中のデータを見たりはできないっぽい。そもそもGCS(Google Cloud Storage)を使うのに、どうしてblobstoreの機能を使うのかもよくわかっていない。

1

ImportError: No module named cloudstorageというエラーが出てしまう場合の解決方法

Google App EngineのpythonでGoogle Cloud Storage Client Libraryを試しに使おうと思い、グーグルのマニュアルを読んでいたんだけど、
デモのファイルを動かすときに以下のエラーが出てはまった・・・
インストールはPyPi(PyPiは何のことか知らなけど、以前にも使ったことがあった)を使い、マニュアル通りに

pip install GoogleAppEngineCloudStorageClient -t <your_app_directory/lib>

とした。これは、your_app_directoryのとこに自分のアプリ(appangineの本体ではなくアプリのファイル)のアドレスをそのまま置き換えて、コマンドプロンプトでコピペするだけでOKだった。

ところが、

ImportError: No module named cloudstorage

というエラーが出て、いろいろ試行錯誤しても駄目で、
海外のサイトを見ると、

import lib/cloudstorage as gcs

のようにlib/をつけると上手く行ったと書いてる人もいたが、上手く行かず
結局どうしたら解決したかというと、
アプリのlibフォルダの中にcloudstorageというフォルダがあるから、これをlibファオルダから出して、一つ上の階層にあげて
app.yamlとかサンプルファイルがある場所に移したらあっさり解決した。

ちなみにPyPiでインストールすると、サンプルファイルが含まれてないようだけど、マニュアルにあるサンプルソースをコピペして、ファイル名の場所だけ変えればそのまま使えた。

1