Google Cloud Storage
Google Cloud Storage (GCS) は、Google Cloud Platform (GCP) におけるオンラインデータストレージです。Amazon Web Services (AWS) で言うところのSimple Cloud Storage Service (S3) にあたります。
GCSの利用方法は非常に簡単で、コンソール画面よりファイルのアップロードを行ったり、設定を変更することが可能です。しかし、いざGoogle App Engine (GAE) などより利用しようとすると一癖あり、なかなか上手くいかないものです。
そこで今回はGAE (Python) よりGCSへのファイルアップロード方法を紹介します。
プロジェクトの設定
GAEより利用するときに、最も忘れがちになるのがライブラリのインポートです。通常利用するライブラリは requirements.txt や app.yaml に記述しますが、今回はプロジェクトにライブラリを直接用意する方法を採ります。pipを利用して、指定ディレクトリにライブラリを配置します。ライブラリは通常「lib」フォルダに配置しますので、tオプションのフォルダはプロジェクトフォルダ配下の「lib」フォルダを指定してください。
pip install GoogleAppEngineCloudStorageClient -t <your_app_directory/lib>
またlibフォルダに配置したライブラリを読み込むため、「appengine_config.py」ファイルを用意し、次のソースコードを記述します。
from google.appengine.ext import vendor
vendor.add('lib')
ファイルのアップロード
cloudstorageの関数を利用するため、インポートします。
import cloudstorage
アップロードは非常に簡単です。たった2行でアップロードできます。
cloudstorage.openメソッドでファイルを用意します。第1引数はGCSのファイルパス(フォルダ名 + ファイル名)、第2引数は書き込みを意味する「w」、第3引数はコンテントタイプをしていします。そしてwriteメソッドで内容を書き込みます。(テストに利用した全ソースコードは末尾に記します)
with cloudstorage.open('/hoge/fuga', 'w', content_type='text/plain') as gcs_file:
gcs_file.write('abcde')
バイナリを用意すれば画像ファイルなども同じ方法でアップロード可能です。
まとめ
Google Cloud Storageへのアップロードと聞くと、面倒な処理が多そうな気がしますが、実は2行のソースコードだけでアップロード可能です。シンプルでわかりやすいですね。設定を忘れないように注意してください。
ソースコード
from flask import Flask
import cloudstorage
app = Flask(__name__)
@app.route('/')
def upload_to_gcs():
with cloudstorage.open('/hoge/fuga', 'w', content_type='text/plain') as gcs_file:
gcs_file.write('abcde')
return 'done'
if __name__ == '__main__':
app.run()