GoogleAppEngineのStandard環境でPython3.7のランタイムがベータ版で利用できるようになったので、試していました。
ドキュメントにはFlaskアプリケーションをデプロイする手順が記載されていましたが、Djangoアプリケーションだと少し設定が追加で必要だったので、メモを残しておきます。
ファイル構成
django-adminツールの startproject
コマンドでは、 mysite
という名前のプロジェクトを作成しました。 manage.py
ファイルの階層にapp.yamlを配置しています。
├── app.yaml ├── db.sqlite3 ├── manage.py ├── mysite │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── requirements.txt └── venv
requirements.txtにはDjangoとgunicornを並べています。
AppEngineの設定
app.yamlの最低限の内容はこれぐらい。
runtime: python37 entrypoint: gunicorn -b :$PORT mysite.wsgi:application skip_files: - ^venv/.*$
静的ファイルなどがある場合は、従来と同様にhandlersを設定します。entrypointを省略すると、main.pyのapp変数をWSGIアプリケーションとして実行しようとするみたいです。
CloudSQL等を使う場合には追加の設定が必要です。
また、entrypointを記述した場合はgunicornがインストールされないようで、requirements.txtに書いておく必要がありました。
app.yaml Reference | App Engine standard environment for Python 3 docs | Google Cloud
デプロイコマンド
gcloudコマンドでデプロイします。事前に gcloud auth login
コマンドで認証し、 gcloud config set project PROJECT_ID
コマンドでGCPのプロジェクトIDを指定しておく必要があります。
gcloud app deploy
Flexible環境と比べるとデプロイに要する時間が1割ぐらい(Flexibleだと10分、Standardだと1分)とかなり差がありました。
気になっていること
従来のPython2.7ランタイムにあった各種GAE向けのサービスで使えないものが多いようです。今後はAppEngine専用のマネージドサービスではなく、GCP上で提供されるサービスを使っていく必要があるのかな。
従来のランタイムとの差異を見るとかなり違うようなので、移行する場合は気をつけたほうがよさそう。