Google App Engine で Flask を動かす

Python の Web フレームワークとして有名な Flask を使って、Google Cloud の Google App Engine 上でサーバを建ててみたいと思います。

スポンサーリンク

Heroku ではなく GAE で

これまでは Flask を Heroku 上で扱っていたのですが、Heroku は基本的に米国と欧州しか選べないので、東京にデータセンターがある GAE を選んでいます。

Django ではなく Flask で

楽だから。(ボソ)

Flask が使えれば API サーバを作ったりウェブサイトを公開したりできるので、それだけで十分ですし、Django を使うほどの機能がないので…。

Bottle も使ったことがありますが、あれは軽量すぎて使いづらいです。

環境

  • Windows 10
  • App Engine Standard Environment

Standard Environment の注意点

インスタンス合計で一日 28 時間まで無料枠です。(Heroku でいえば 28 dyno 時間) また、Python 2.7 までしか使えず、3 系は Flexible Environment のみの提供です。

準備

Google Cloud SDK をインストールし、コマンド操作ができる環境を作ります。

インストール後に上記コマンドを実行すると、確か Google へのログインなどが行われます。

ディレクトリの構成

Flask を動かすファイルの構成はこのようになっています。

  • lib ディレクトリ
  • app.yaml
  • appengine_config.py
  • main.py
  • requirements.txt
  • static ディレクトリ
  • templates ディレクトリ

今回は API サーバを建てようと思ったので、下二つは用意しませんでした。

構成ファイルの概要

Getting Started with Flask on Google App Engine Standard Environment に沿う形で。

app.yaml

App Engine の設定を色々書き込むファイルです。

Flask は元々シングルスレッドですが、 threadsafetrue にするとマルチスレッドで処理できます。

appengine_config.py

これはドキュメントのコピペ。lib ディレクトリにサードパーティのモジュールを入れるための設定です。

requirements.txt

使うモジュールを書きます。これを使って lib にインストールしますが、デプロイしなくてもいいのかもしれません。

main.py

最低限これがあれば動きます。トップページに接続すると Hello World! と表示されるはずです。

app.run() は必要ありません。ちなみに、Flask 側でマルチスレッドにするためには app.run(threaded=True) とするらしいです。(こないだ知った)

ローカル環境でのテスト

ここが少し曲者で、パスがうまく通っていないらしくドキュメント通りにはいきませんでした。

本来はこれでいけるはず。パスをいじってもだめだったので、普通に実行する形でやりました。

これでローカルの 8080 番ポートで接続できます。

エラーの対処

No module named 'setup'

→ ローカル開発環境が Python 2.7 になってません。

Can't connect to HTTPS URL because the SSL module is not available on google app engine

→ app.yaml への書き込みで解決できます。

GAE へのデプロイ

Heroku のように Git で管理しているわけではないので、これだけです。二回目以降は gcloud app deploy でやってます。

最後に

GAE を使って解決しようと思った問題は結局未解決なのですが、GAE も便利そうだということだけわかりました…。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA