GAE + Python でサーバーを構築してみました



GAE と Python を使ってWebアプリケーションを立ち上げたかったので、
記事を参考にさせていただきサーバー構築をしてみました。


*環境

  • MacOS
  • Python 2.7.14
  • Flask 1.0.2


*参考



*前提

この記事は下記を前提としています。


*Cloud SDK の確認

CloudSDKがまだ入っていない場合はダウンロードします。
$ curl https://sdk.cloud.google.com | bash

ダウンロード後、下記コマンドを実行して自分のアカウントの設定になっているか確認します。
$ gcloud auth list

設定ができていない場合は、下記コマンドを実行して自分のアカウントを設定します。
$ gcloud auth login
$ gcloud config set project PROJECT_ID


プロジェクトが設定されていることを確認します。
$ gcloud config list project

設定されていない場合は下記コマンドで設定します。
# 全てのプロジェクトIDを確認
$ gcloud projects list

# プロジェクトIDを設定
$ gcloud config set project {PROJECT_ID}

また、GCPコンソール画面にログインし、「IAMと管理」で自分のアカウントがオーナーになっていることを確認します。


*環境構築

仮想環境を作成します。今回は virtualenv を使っています。
$ virtualenv gae1
$ source gae1/bin/activate
(gae1) $ 

仮想環境に入ったら、開発に必要なライブラリをインストールします。
今回は Python フレームワークの Flask を使うので、Flask をインストールします。
(gae1) $ sudo pip install Flask


*実装

下記ディレクトリ構成でフォルダとファイルを作成していきます。
gae1
├── bin/
├── lib/
├── app.yaml
├── appengine_config.py
├── main.py
└── requirements.txt

App Engine に必要な構成ファイルを作成します。
今回はスレッドセーフの設定にしたので、同じインスタンスで複数同時の要求を処理することができます。URL「/.*」への要求は、main.py の app オブジェクトで処理されます。

<app.yaml>
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /.*
  script: main.app

libraries:
- name: flask
  version: 0.12

- name: ssl
  version: latest

実行するスクリプトファイルを実装します。
<main.py>
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'hello, world', 200

lib ディレクトリをバインドするためのスクリプトです。
<appengine_config.py>
from google.appengine.ext import vendor
vendor.add('lib')

requirements.txt に仮想環境のライブラリ情報を出力します。
$ pip freeze > requirements.txt

requirements.txt のライブラリ情報を lib ディレクトリにインポートします。
$ pip install -r requirements.txt -t lib


*ローカル環境でのテスト

デプロイする前にローカル環境でテストをします。
Cloud SDK にはテストするスクリプトが用意されていて、
dev_appserver.py を起動することによってローカル環境を立ち上げることができます。

下記コマンドを実行して、ローカル環境を立ち上げます。
(gae1) $ dev_appserver.py app.yaml

INFO     2018-09-01 10:11:33,845 api_server.py:274] Starting API server at: http://localhost:63944
INFO     2018-09-01 10:11:33,974 dispatcher.py:270] Starting module "default" running at: http://localhost:8080
INFO     2018-09-01 10:11:33,982 admin_server.py:152] Starting admin server at: http://localhost:8000
INFO     2018-09-01 10:11:47,559 module.py:846] default: "GET / HTTP/1.1" 200 12

下記URLにアクセスすると「hello, world」が画面に出力されます。
http://localhost:8080












下記URLにアクセスすると、GAEの管理画面で確認することができます。
http://localhost:8000













*デプロイ

ローカル環境での確認が完了したら、下記コマンドを実行してデプロイします。
(gae1) $ gcloud app deploy app.yaml

GCPコンソール画面の App Engine → バージョン で、デプロイされたことが確認できます。











バージョンについては GCPコンソール画面からトラフィックを移行することで、すぐに前バージョンへの切り戻しが可能になっています。
アプリを拡張する場合も、同じ手順でローカル環境で確認してからデプロイしていきます。


*所感

GAE を使って簡単にサーバーを立ち上げることができました。
yaml形式の構成ファイルについても、公式ドキュメントなどに書き方が詳しく載っているので、簡単に設定を追加することができそうです。
参考にした記事にも載っていますが、今回やったこと以外にもGAE では
cron や Taskqueue 、logging など便利な機能を使うことができるので活用してみると良さそうです。

Previous
Next Post »

人気の投稿