GAE と Python を使ってWebアプリケーションを立ち上げたかったので、
記事を参考にさせていただきサーバー構築をしてみました。
*環境
- MacOS
- Python 2.7.14
- Flask 1.0.2
*参考
*前提
この記事は下記を前提としています。- Googleアカウントを持っている
- GCPコンソール画面でプロジェクトを作成済み
*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 など便利な機能を使うことができるので活用してみると良さそうです。
Sign up here with your email
ConversionConversion EmoticonEmoticon