仕事で使うことがあったけど、忘れそうなのでメモ。
AppEngineのバックエンドインスタンス(Backends)について。
Backends Python API Overview | Python | Google Cloud Platform
ここではdynamicインスタンス、フロントエンドと同じコードをデプロイする前提で書く。
試したのはpython27ランタイム。
コードの用意
dynamicの場合はwarmup同様、/_ah/startに最初にアクセスが来るので、初期化が必要な場合はこのパスで処理する。
Python2.7でも特に問題はなし。
デプロイ
バックエンドへのコードのデプロイはappcfg.pyで行うが、backendsのコマンドを使う必要がある。
$ appcfg.py backends . update
deferredモジュールでバックエンドインスタンスにタスクを投げる
TaskQueueのラッパーであるgoogle.appengine.ext.deferredは、TaskQueueと同様にタスクを実行するアプリケーションのバージョンを指定できる。これにバックエンド名を指定することで、バックエンドにタスクを実行させることもできる。
mybackendsという名前のバックエンドにタスクを実行させる場合は、フロント側でこんな感じに書く。
import logging from google.appengine.ext import webapp from google.appengine.ext import deferred def lazy_task(spam, egg): """バックエンドで実行されるタスク """ logging.info("lazy - %s, %s" % (spam, egg)) class MyHandler(webapp.RequestHandler): def get(self): deferred.defer(lazy_task, "arg1", "arg2", _target='mybackends')
defer関数のキーワード引数で_targetにバックエンド名を指定する。
_targetにapp.yamlのversionを指定すると、指定したバージョンでタスクを実行することもできる。