App Engine スタンダード環境での Django の実行

Google App Engine スタンダード環境で動作する Django アプリの開発を簡単に始めることができます。また、App Engine はトラフィックに応じて動的に拡張するため、ユーザー数が少なくても、何百万人ものユーザー数であっても、すべてのユーザーに対して確実にサービスを提供できます。

このチュートリアルは、Django ウェブ開発の知識があることを前提としています。ここでは、Django の公式チュートリアル アプリである「最初の Django アプリを作成する」のデプロイ手順について説明します。特に Django による開発が初めての場合は、このチュートリアルの前に公式チュートリアル アプリを実行することをおすすめします。このアプリのモデルは質問からなるアンケートで、Django 管理コンソールを使用してモデルを操作できます。

このチュートリアルには Python 3.7 が必要です。

始める前に

各ステップを完了したら、そのステップのチェックボックスをオンにしてください。

  1. check_box_outline_blank check_box Google Cloud Platform Console でプロジェクトを作成します。
    まだプロジェクトを作成していない場合は、このステップで作成します。プロジェクトにより、deployment、アクセス制御、課金、サービスなど、アプリに関するすべての Google Cloud Platform リソースを管理できます。
    1. GCP Console を開きます。
    2. 上部のプルダウン メニューで、[プロジェクトを作成] を選択します。
    3. [詳細設定を表示] をクリックします。[App Engine の場所] で、日本のロケーションを選択します。
    4. プロジェクトの名前を指定します。
    5. プロジェクト ID をメモしておきます。この ID はプロジェクト名とは異なる場合があります。プロジェクト ID をコマンドや構成で使用します。
  2. check_box_outline_blank check_box プロジェクトの課金を有効にして、無料トライアルに登録します。

    プロジェクトの課金をまだ有効にしていない場合は、課金を有効にして、無料トライアルに登録します。課金を有効にすると、インスタンスの実行やデータの保存など、課金対象のリソースをアプリで使えるようになります。 無料トライアル期間中は、どのサービスも課金されることはありません。

  3. check_box_outline_blank check_box Cloud SDK をインストールします。

    Cloud SDK をまだインストールしていない場合は、今すぐ Cloud SDK をインストールして初期化してください。Cloud SDK には、GCP でリソースの作成と管理に使用できるツールとライブラリが含まれています。

  4. check_box_outline_blank check_box プロジェクトで API を有効にします。

    GCP Console が開き、このチュートリアルで使用する API が自動的に有効になります。使用される API は Google Cloud SQL API です。

アプリのダウンロードと実行

事前準備が完了したら、Django サンプルアプリをダウンロードしてデプロイします。次のセクションで、このサンプルの構成、実行、デプロイについて説明します。

Django アプリのクローンを作成する

Django サンプルアプリのコードは、GitHub の Google Cloud Platform python-docs-samples リポジトリにあります。

ローカルマシンにリポジトリのクローンを作成します。

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

サンプルコードのあるディレクトリに移動します。

Linux / macOS

cd python-docs-samples/appengine/standard_python37/django

Windows

cd python-docs-samples\appengine\standard_python37\django

zip ファイルとしてサンプルをダウンロードして展開することもできます。

ローカル環境の設定

デプロイされたアプリは、App Engine 環境に組み込まれている Cloud SQL Proxy を使用して Cloud SQL インスタンスと通信します。ただし、アプリをローカルでテストするには、Cloud SQL Proxy のローカルコピーを開発環境にインストールして使用する必要があります。

Cloud SQL Proxy について学習します。

Cloud SQL インスタンスに対する基本的な管理タスクは、MySQL クライアントを使用して行うことができます。

Cloud SQL プロキシをインストールする

Cloud SQL Proxy をダウンロードしてインストールします。Cloud SQL Proxy を使用すると、ローカル実行時に Cloud SQL インスタンスに接続できます。

Linux 64 ビット

  1. プロキシをダウンロードします。
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

Linux 32 ビット

  1. プロキシをダウンロードします。
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

macOS 64 ビット

  1. プロキシをダウンロードします。
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

macOS 32 ビット

  1. プロキシをダウンロードします。
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

Windows 64 ビット

https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe を右クリックして [名前を付けてリンク先を保存] を選択し、ファイル名を cloud_sql_proxy.exe に変更してプロキシをダウンロードします。

Windows 32 ビット

https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe を右クリックして [名前を付けてリンク先を保存] を選択し、ファイル名を cloud_sql_proxy.exe に変更してプロキシをダウンロードします。
お使いのオペレーティング システムがここに含まれていない場合は、プロキシをソースからコンパイルすることもできます。

Cloud SQL インスタンスを作成する

  1. MySQL 第 2 世代インスタンスの Cloud SQL を作成します。インスタンスに polls-instance などの名前を付けます。インスタンスを使用できるようになるまで数分かかることがあります。インスタンスの準備が整うと、インスタンス リストに表示されます。
  2. 次に、Cloud SDK を使用して次のコマンドを実行します。[YOUR_INSTANCE_NAME] は、Cloud SQL インスタンスの名前を表します。次のステップで使用するために、connectionName に示されている値をメモしておきます。
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    connectionName の値は、[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME] の形式になります。

Cloud SQL インスタンスを初期化する

  1. 前のステップでメモした connectionName を使用して、Cloud SQL Proxy を開始します。

    Linux / macOS

    ./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    Windows

    cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    [YOUR_INSTANCE_CONNECTION_NAME] は、前のステップでメモした connectionName の値に置き換えます。

    ローカルでテストを行うため、このステップでローカル コンピュータから Cloud SQL インスタンスへの接続を確立します。ローカルでのアプリのテストが終了するまで、Cloud SQL Proxy を実行したままにしてください。

  2. 次に、新しい Cloud SQL ユーザーとデータベースを作成します。

    Console

    1. Cloud SQL インスタンス polls-instance 用に、GCP Console を使用して新しいデータベースを作成します。たとえば、polls のような名前を使用します。
    2. Cloud SQL インスタンス polls-instance 用に、GCP Console を使用して新しいユーザーを作成します。

    MySQL クライアント

    1. 別のコマンドライン タブで、MySQL クライアントまたは同様のプログラムを使用してインスタンスに接続します。プロンプトが表示されたら、構成したルート パスワードを使用します。
      mysql --host 127.0.0.1 --user root --password
      
    2. 次のコマンドを使用して、必要なデータベース、ユーザー、アクセス権限を Cloud SQL データベース内に作成します。[MYSQL_USER][MYSQL_PASSWORD] を、使用するユーザー名とパスワードで置き換えてください。
      CREATE DATABASE polls;
      CREATE USER '[MYSQL_USER]' IDENTIFIED BY '[MYSQL_PASSWORD]';
      GRANT ALL ON . TO '[MYSQL_USER]';
      

データベースを構成する

  1. mysite/settings.py を編集用に開きます。

  2. [YOUR-USERNAME] および [YOUR-PASSWORD] の 2 つを、「Cloud SQL インスタンスの作成」ステップで作成したデータベースのユーザー名とパスワードに置き換えます。これにより、App Engine のデプロイとローカル設定の両方でデータベースに接続できるようになります。

  3. 以下のコマンドを実行します。次のステップ用に、出力された connectionName 値をコピーします。

    gcloud sql instances describe [YOUR_INSTANCE_NAME]
    
  4. [YOUR-CONNECTION-NAME] を前のステップでコピーした connectionName に置き換えます。

  5. [YOUR-DATABASE] を「Cloud SQL インスタンスの初期化」ステップで選択した名前に置き換えます。

  6. settings.py を閉じて保存します。

ローカル コンピュータでアプリを実行する

  1. ローカル コンピュータ上で Django アプリを実行するには、Python、pip、virtualenv を含む Python 開発環境をセットアップする必要があります。詳細については、Google Cloud Platform の Python 開発環境のセットアップをご覧ください。

  2. 孤立した Python 環境を作成し、依存関係をインストールします。

    Linux / MacOS

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv env
    env\scripts\activate
    pip install -r requirements.txt
    

  3. モデルを設定するために Django の移行を実行します。

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. ローカル ウェブサーバーを起動します。

    python manage.py runserver
    
  5. ウェブブラウザに次のアドレスを入力します。

    http://localhost:8000
    

[Hello, world. You're at the polls index.」というテキストが記されたページが表示されます。このサンプルアプリのページは、ユーザーのコンピュータで実行されている Django ウェブサーバーによって配信されます。次に進む準備ができたら、Ctrl+C キーを押して、ローカル ウェブサーバーを停止してください。

Django 管理コンソールを使用する

  1. スーパーユーザーを作成します。

    python manage.py createsuperuser
    
  2. ローカル ウェブサーバーを起動します。

    python manage.py runserver
    
  3. ウェブブラウザに次のアドレスを入力します。管理サイトにログインするには、createsuperuser の実行時に作成したユーザー名とパスワードを使用します。

    http://localhost:8000/admin/
    

App Engine スタンダード環境のアプリをデプロイする

  1. すべての静的コンテンツを 1 つのフォルダにまとめます。次のコマンドは、アプリのすべての静的ファイルを settings.py 内の STATIC_ROOT で指定されたフォルダに移動します。

    python manage.py collectstatic
    
  2. app.yaml ファイルが存在するアプリの python-docs-samples/appengine/standard/django ディレクトリから次のコマンドを実行し、アプリをアップロードします。

    gcloud app deploy
    

    更新が完了したことを通知するメッセージが表示されるまで待ちます。

クラウドでアプリが実行されることを確認する

ウェブブラウザに次のアドレスを入力します。

https://<your_project_id>.appspot.com

今回は、App Engine スタンダード環境で実行されているウェブサーバーによってリクエストが処理されます。

このコマンドは、app.yaml に記述されているアプリケーションをデプロイし、新しくデプロイされたバージョンをデフォルト バージョンとして設定します。これにより、すべての新しいトラフィックがこのバージョンによって処理されます。

アプリを更新する場合は、最初にデプロイしたときと同じコマンドを使って更新バージョンをデプロイできます。デプロイを行うと、アプリの新しいバージョンが作成され、それがデフォルトのバージョンに設定されます。アプリの古いバージョンはそのまま残ります。これらのアプリ バージョンはすべて課金対象のリソースとなるのでご注意ください。アプリのデフォルト以外のバージョンを削除する方法については、クリーンアップを参照してください。

本番環境

本番環境でコンテンツを提供する準備が整ったら、構成を次のように変更します。

  1. mysite/settings.py で、DEBUG 変数を False に変更します。

コードについて

Django サンプルアプリは、Django の標準ツールを使用して作成されています。以下のコマンドは、プロジェクトと polls アプリを作成します。

django-admin startproject mysite
python manage.py startapp polls

settings.py ファイルには、SQL データベースの構成が含まれています。settings.py 内のコードは、GAE_APPLICATION 環境変数を使用して、アプリが App Engine もしくはローカル コンピュータのどちらで実行されるかを判別します。アプリが App Engine 上で実行されると、/cloudsql Unix ソケットを使用して MySQL ホストに接続します。ローカル コンピュータでアプリが実行される場合、TCP を使用して MySQL ホストに接続され、ユーザー名とパスワードが要求されます。

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

app.yaml ファイルには、App Engine へのデプロイに関する構成情報が含まれています。この app.yaml ファイルは、App Engine が static/ ディレクトリから静的ファイルを提供することを示します。

runtime: python37

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...