最近Google App Engineをちょっと触ってみたメモ

ごくたまにしかアクセスがないようなものだととても安くさばけるしいいのかなと思い調査してお試し。

以下基礎的な概要をつかむ上での参考。

料金まとめ

東京リージョン。

  • Standard Environment
    • 東京 $0.07/h
    • スピンアップしてからシャットダウンまで最低15分
    • 1日1時間(最低稼働時間15分x4回)の稼働の場合 $2.1/month
  • Flexible Enviroment
    • vCPU $0.0666/h
    • メモリ $0.0089/h
    • 永続ディスク $0.0520/month
  • Google Cloud Datastore
    • 小規模なら確実に無料で収まる

非常にたまにしかアクセスがないという前提があり、Flexibleはスピンアップに時間がかかることを考えるとStandard一択。
料金的にもFlexibleを使うならGAEにこだわる意味は薄い(と思う)

Flask

GAEはRubyも使えるようになっているがFlexibleになってしまうので今回想定する用途では微妙。

ということでPythonでSinatraっぽいものを探してFlask
Bottleというものもあるが、よりテンプレート変数の渡し方がスマートなかんじなので好印象。

お試し

公式のドキュメントがよくできているので、それを読みつつ進めれば良い。

いちおう試したログ。

GAEでプロジェクト作成

公式のドキュメントからたどって適当に。

Pythonの準備

Macportsで入れた2.7で。

SDKのダウンロード

公式のドキュメントからたどって適当に。

サンプルアプリの準備


$ git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
$ cp -rf python-docs-samples/appengine/standard/flask/hello_world try-gae-flask
$ cd try-gae-flask

app.yamlの確認


runtime: python27
api_version: 1
threadsafe: true

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

libraries:
- name: flask
  version: 0.12

app.yamlのflaskのバージョンが0.12。世の最新が1.0.2ので書き換えてみたが、なんだか動かないので戻した。

デプロイ確認

GAE上でプロジェクトを作ってから。公式ドキュメント読めばできる。


$ gcloud app deploy

ローカルで開発環境の起動


$ dev_appserver.py app.yaml
=> http://localhost:8080/

main.pyの編集

Hello World部分を変えてみたりとか、ルーティング追加したりとか。

日本語を使うならmain.pyの頭にマジックコメントを追加。初歩ですか。そうですね。


# -*- coding: utf-8 -*-

ライブラリの追加


$ pip install requests_toolbelt -t lib

GAE側に用意されていないライブラリはlib以下に入れてデプロイ。
何かひとつ入れると芋づる式に色々入れないといけないので若干面倒で試行錯誤。

所感

少しやれそうだ。簡単なものにはよさそう。

ところで2.7のサポートは2020年までとのことだけど、そのあとStandard Environmentどうなるのという懸念はある。