Google App Engine スタンダード環境に Python3 + Django をデプロイする

Google App Engine スタンダード環境に Python3 + Django をデプロイします。

Google App Engine は Google が提供する PaaS です。開発者はサーバ構築やセキュリティパッチ適用などの運用を意識することなく、プログラムや Web サービスに注力することができます。私は今までずっとオンプレで IaaS をやってきたので、PaaS の便利さに驚きと感動の連続です。みなさんにもこの感動を是非とも味わって欲しいです。

バージョン

  • Python 3.7
  • Django 2.2.1

インストール

Cloud SDK のインストール

Google Cloud で開発をするために、Cloud SDK が必要になります。

Cloud SDK をこちらからダウンロードし、手順に従ってインストールします。私の環境は MacOS 64 ビットですので、MacOS 64 ビットの tar をダウンロード、解凍し、以下のようにインストールしました。

cd google-cloud-sdk/
./install.sh
# ターミナルを再起動
gcloud init
gcloud components update

Python3 仮想環境のインストール

次に、Python3 の仮想環境をインストールし、アクティベートします。私の場合、Python3 は Homebrew でインストール済みです。

python3 -m venv venv
source venv/bin/activate

Django のインストール

次は Django を Python3 の仮想環境にインストールします。

pip install django

実装

それでは実装していきたいと思いますが、今回は App Engine へのデプロイが目的のため、特に実装はせず、必要最低限の設定のみとします。

Django プロジェクトのインストール

ますは startproject で Django プロジェクトをインストールします。

django-admin startproject hello_gae

settings.py

Django プロジェクトをインストールしたら、settings.py の ALLOWED_HOSTS を以下のように修正します。アクセスをどこからでも受け付けるようにするお決まりの設定ですね。


...

ALLOWED_HOSTS = ['*']

...

app.yaml

app.yaml です。このファイルは App Engine の設定ファイルとなっていて、アプリケーションのバージョンやインスタンスクラス、スケールタイプ、URL のマッピングなどを設定します。

runtime: python37

handlers:
- url: /static
  static_dir: static/

- url: /.*
  script: auto

App Engine スタンダード Python3 は script: auto しか指定できない

App Engine スタンダード Python3 では、url /.* の script に auto しか設定できないようです。auto 以外を設定するとエラーになりますの気をつけてください。

Google App Engine Python: Error in yaml config file when deploying

https://stackoverflow.com/questions/53117774/google-app-engine-python-error-in-yaml-config-file-when-deploying

main.py

main.py は App Engine の入り口になるファイルです。

from hello_gae.wsgi import application
app = application

requirements.txt

requirements.txt に必要なライブラリをリストします。

Django==2.2.1

デプロイ

用意ができましたので、デプロイをしていきましょう。

Google アカウントの認証と承認

デプロイは gcloud コマンドを使いますが、実行するには、事前に Google アカウントの認証と承認が必要になりますので、以下のコマンドを実行します。Cloud SDK が Google アカウントでの認証と承認を要求します。

gcloud auth login

Google Cloud Platform プロジェクト作成

次は、プロジェクトを作成します。プロジェクトは好きな名前をつけてください。

gcloud projects create python3-std-django
gcloud config set project python3-std-django

デプロイ

デプロイの準備ができましたので、以下のコマンドを実行し、Django をデプロイします。

gcloud app deploy

デプロイに成功すると、https://[プロジェクト名].appspot.com にアクセスできるようになります。

https://python3-std-django.appspot.com

Cloud Build API

gcloud でデプロイするには Cloud Build API を有効にする必要があります。

デフォルトでは無効になっているので、gcloud app deploy を初めて実行すると以下のエラーが出ると思います。

以下のエラーが出たら、エラーメッセージに記載のある URL にアクセスし、API を有効にしてください。

ERROR: (gcloud.app.deploy) Error Response: [7] Access Not Configured. Cloud Build has not been used in project python3-std-django before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudbuild.googleapis.com/overview?project=python3-std-django then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

まとめ

Google App Engine スタンダード環境に Python3 + Django をデプロイしました。

App Engine を利用することで、プログラマはサーバを意識する必要がなくなるため、とても幸せになれます。また、デプロイ方法もとても簡単で、gcloud コマンドを数回実行するだけです。