Google App EngineよりGoogle Cloud Storageへファイルをアップロード

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()
» エンジニア登録はこちら