GAE+FlaskでHello, world!
概要
最近GAEとFlaskの勉強をし始めようと思ったのでその備忘Log とりあえずハローワールドまで。
GAEについて
Google App Engineの略で、Google Cloud Platformで利用できるPasSの一つ。
インフラの管理を担ってくれるので、アプリケーション開発に集中することができるというのが一番のメリットです。
PythonのフレームワークであるFlaskを用いて、簡単なAPIサーバを構築します。
ディレクトリ構造
GAEの設定ファイルとFlaskのファイルのディレクトリ構造です。
ディレクトリ構造
app_dir/ アプリケーションのディレクトリ - main.py メインスクリプト - app.yaml GAEの設定ファイル - lib/ ライブラリのディレクトリ(GAEでサードパーティライブラリを使用する場合は必須) - appengine_config.py libを読み込ませる - requirements.txt ライブラリ管理テキスト
SampleApp実装
python3系を使います
app.yaml
runtime: python37 handlers: - url: /.* secure: always script: auto
main.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'hello world!', 200 if __name__ == '__main__': app.run()
アクセスすると'hello world!'と返す簡単なWebアプリケーションをFlaskで作って見ましょう(なんとこれだけでハローワールドが完成!)
appengine_config.py
from google.appengine.ext import vendor vendor.add('lib')
libディレクトリを読み込むことを示すPythonファイルです。
pip install -r requirements.txt -t lib
libディレクトリにライブラリをインポートします。
ローカル環境でのテスト
GAEでは通常、
dev_appserver.py app.yaml
コマンドによってローカルでサーバーのテストを行えるのですが、Python3系は未対応なので行えません。
ですので通常のPythonサーバーを立ち上げ、テストを行います。
python main.py
http://localhost:5000/にアクセスし hello world!が表示されるか確認します。
デプロイ
ローカルで挙動を確認後、デプロイを行います。
glocud app deploy app.yaml # 2回目以降はapp.yamlは不要 Services to deploy: descriptor: [/任意のディレクトリ/app.yaml] source: [/任意のディレクトリ] target project: [GCPプロジェクトID] target service: [サービス名] target version: [20181230] target url: [https://サービス名-dot-GCPプロジェクトID.appspot.com] Do you want to continue (Y/n)?Y ... Updating service [サービス名]...done. Setting traffic split for service [サービス名]...done. Deployed service [サービス名] to [https://サービス名-dot-GCPプロジェクトID.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s サービス名 To view your application in the web browser run: $ gcloud app browse -s サービス名
GAEはデプロイに時間がかかるイメージです。
この程度のアプリでも3分程度かかる時もあります。
最終行の
gcloud app browse
によって自分のサービスをブラウザからアクセスできます。 次回は今回簡単に立ち上げたAPIを拡張していきます。