いつの間にかGoogleAppEngineのStandardでpython3が使えるようになっていたので、bottle.pyしてみました。
チュートリアルはflask使ったりしてました。が、bottle好きなので。
python3については 以前からflexible環境なら使えてたらしーのだけれど、flexibleにするなら他のPaaSでいいしな、と久しく触ってなかったGAE。
py3使えるならそりゃ飛び付きますよ。鯖のお守りとかしたくないし。
導入の雑なステップとしては以下の通り
- SDKをインストール(本記事では割愛)
- app.yamlを書く
- requirements.txtを書く
- main.pyを書く
app.yaml
runtime: python37
これだけでOK。
ずいぶんスッキリしている。
bottle.pyらしくだと、お好みでstatic以下のhandlerも追加してもいいかも。
handler指定がないのはmain.pyのappに勝手にルーティングされてくれるらしいのでそこは書いてないです。
handlers:
- url: /(.*\.(css|png|jpg|gif|ico|js))$
static_files: static/\1
upload: static/.*\.(css|png|jpg|gif|ico|js)$
requirements.txt
pipのPodfile的なファイルらしい。
これに書いとくとdeploy時にpipでインストールしてくれるらしい。
Bottle==0.12.16
main.py
from bottle import Bottle
app = Bottle()
@app.route('/')
def top():
return "Hello, world!"
if __name__ == '__main__':
app.run(host='localhost', port=8080,reloader=True,debug=True)
で、gcloud deploy
すると、なんか動くみたい。
すごい楽チンだ。。。素晴らしい。。。
もちろん。python3 ./main.py
でlocalhost:8080で動きます。
し、さらにこのあとFirestore試してたら認証周り勝手に設定してくれて、一切の苦労なしにローカルからリモートのDB覗けてる。すごい時代や。。。
その他
- ドキュメントが整備というか整理というかされてないけどpython-docs-samplesを眺めて、雰囲気で書いてたら無事になんか動くっぽい。
-
.gcloudignore
に正規表現を書いとくとdeploy対象外に指定できる(.gitignoreみたいに)
virtualenvしない
チュートリアルにvirtualenv
入れろとか書いてあるけど必須じゃないし、面倒いので
pip3 install -r requirements.txt -t ./lib/
で適当なフォルダに突っ込んで、main.py
の先頭でローカル実行ならソコ参照するように入れてみた。ちゃんと動く。
適当なフォルダを.gcloudignore
へ追加するも忘れずに。
if __name__ == '__main__': # add local lib path
import sys,os
sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))